Spring 我应该使用Firebase和Mongodb对用户进行身份验证吗?
所以最近我开始写一个android应用程序,我正在使用它 后端是JavaSpring我应该如何实施身份验证?我遵循了谷歌在谷歌的教程签名 用户,然后连接firebase 登录用户Spring 我应该使用Firebase和Mongodb对用户进行身份验证吗?,spring,mongodb,android-studio,oauth-2.0,firebase-authentication,Spring,Mongodb,Android Studio,Oauth 2.0,Firebase Authentication,所以最近我开始写一个android应用程序,我正在使用它 后端是JavaSpring我应该如何实施身份验证?我遵循了谷歌在谷歌的教程签名 用户,然后连接firebase 登录用户 public类MainActivity扩展了AppCompatActivity{ 私人签名按钮签名按钮; 私有Google Signinclient mGoodleSignInClient; 私有字符串TAG=“MainActivity”; 私人消防队; 私人按钮btnSignOut; 专用输入RC\u符号IN=1;
public类MainActivity扩展了AppCompatActivity{
私人签名按钮签名按钮;
私有Google Signinclient mGoodleSignInClient;
私有字符串TAG=“MainActivity”;
私人消防队;
私人按钮btnSignOut;
专用输入RC\u符号IN=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
signInButton=findViewById(R.id.sign_in_按钮);
mAuth=FirebaseAuth.getInstance();
btnSignOut=findviewbyd(R.id.sign\u out\u按钮);
GoogleSignInOptions gso=新建GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT\u SIGN\u IN).requestIdToken(getString(R.string.DEFAULT\u web\u client\u id)).requestEmail().build();
mGoodleSignInClient=GoogleSignIn.getClient(this,gso);
signInButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
签名();
}
});
btnSignOut.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mGoodleSignInClient.signOut();
Toast.makeText(MainActivity.this,“您已注销”,Toast.LENGTH_SHORT.show();
btnSignOut.setVisibility(View.INVISIBLE);
}
});
}
私人无效签名(){
Intent-signinint=mGoodleSignInClient.getsigninint();
startActivityForResult(签名、注册);
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RC\u登录){
Task Task=GoogleSignIn.GetSignedAccountFromIntent(数据);
handleSignInResult(任务);
}
}
私有void handleSignInResult(任务完成任务){
试一试{
GoogleSignInAccount acc=completedTask.getResult(ApiException.class);
Toast.makeText(MainActivity.this,“成功登录”,Toast.LENGTH_SHORT.show();
字符串idToken=acc.getIdToken();
新建CallAPI(idToken).execute();
FirebaseGoogleAuth(acc);
}
捕获(APIE){
Toast.makeText(MainActivity.this,“登录失败”,Toast.LENGTH_SHORT.show();
FirebaseGoogleAuth(空);
}
}
私有void FirebaseGoogleAuth(谷歌签名帐户){
AuthCredential AuthCredential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.signInWithCredential(authCredential).addOnCompleteListener(MainActivity.this,新的OnCompleteListener)还是拥有两个数据库毫无意义?
(firebase和mongodb)
public class MainActivity extends AppCompatActivity {
private SignInButton signInButton;
private GoogleSignInClient mGoodleSignInClient;
private String TAG = "MainActivity";
private FirebaseAuth mAuth;
private Button btnSignOut;
private int RC_SIGN_IN = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
signInButton = findViewById(R.id.sign_in_button);
mAuth = FirebaseAuth.getInstance();
btnSignOut = findViewById(R.id.sign_out_button);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.default_web_client_id)).requestEmail().build();
mGoodleSignInClient = GoogleSignIn.getClient(this,gso);
signInButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
signIn();
}
});
btnSignOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mGoodleSignInClient.signOut();
Toast.makeText(MainActivity.this,"You Are Signed Out", Toast.LENGTH_SHORT).show();
btnSignOut.setVisibility(View.INVISIBLE);
}
});
}
private void signIn(){
Intent signInIntent = mGoodleSignInClient.getSignInIntent();
startActivityForResult(signInIntent,RC_SIGN_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask){
try {
GoogleSignInAccount acc = completedTask.getResult(ApiException.class);
Toast.makeText(MainActivity.this,"Signed In Successfully", Toast.LENGTH_SHORT).show();
String idToken = acc.getIdToken();
new CallAPI(idToken).execute();
FirebaseGoogleAuth(acc);
}
catch (ApiException e){
Toast.makeText(MainActivity.this,"Sign In Failed", Toast.LENGTH_SHORT).show();
FirebaseGoogleAuth(null);
}
}
private void FirebaseGoogleAuth(GoogleSignInAccount acct){
AuthCredential authCredential = GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.signInWithCredential(authCredential).addOnCompleteListener( MainActivity.this,new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task){
if(task.isSuccessful()){
Toast.makeText(MainActivity.this,"Successful", Toast.LENGTH_SHORT).show();
FirebaseUser user = mAuth.getCurrentUser();
try {
updateUI(user);
} catch (IOException e) {
e.printStackTrace();
}
}
else{
Toast.makeText(MainActivity.this,"Failed", Toast.LENGTH_SHORT).show();
try {
updateUI(null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
private void updateUI(FirebaseUser fUser) throws IOException {
btnSignOut.setVisibility(View.VISIBLE);
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
if(account != null){
startActivity(new Intent(MainActivity.this, Profile.class));
Toast.makeText(MainActivity.this,"Signed in with Google Account" , Toast.LENGTH_SHORT).show();
}
}
}
public class CallAPI extends AsyncTask<String,String,String> {
String idToken;
public CallAPI(String idToken){
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
OkHttpClient client = new OkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
builder.add("idToken", idToken);
RequestBody formBody = builder // A sample POST field
.build();
Request request = new Request.Builder()
.url("mybackendurlforacceptingtoken") // The URL to send the data to
.post(formBody)
.build();
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}