Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 我应该使用Firebase和Mongodb对用户进行身份验证吗?_Spring_Mongodb_Android Studio_Oauth 2.0_Firebase Authentication - Fatal编程技术网

Spring 我应该使用Firebase和Mongodb对用户进行身份验证吗?

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;

所以最近我开始写一个android应用程序,我正在使用它 后端是JavaSpring我应该如何实施身份验证?我遵循了谷歌在谷歌的教程签名 用户,然后连接firebase

登录用户
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);
    }
}