首页 > 解决方案 > 我如何将来自谷歌登录的凭据存储在 Firebase 身份验证中以用于将来的登录

问题描述

我创建了一个标准的登录和注册页面,并添加了一个使用自定义 GogleSignInButton 使用谷歌帐户登录的替代方法。

该按钮工作良好。我能够选择一个 google 帐户并登录,但凭据不会反映在 firebase 身份验证控制台中,也不会像使用标准 firebase UI 时那样为新用户带来注册活动。我已经有一个使用电子邮件和密码的有效登录名(如果有帮助的话)。

我希望在实施凭据存储和使用 Google 帐户注册新用户方面获得帮助。

从下图中您可以看到没有 gmail 帐户 在此处输入图像描述

SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);

    GoogleSignInOptions gso = new 
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);





    if (mAuth.getCurrentUser() != null) {
        startActivity(new Intent(LoginActivity.this, 
MainActivity.class));
        finish();
    }

        signInButton.setOnClickListener(this);



    private void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.sign_in_button:
            signIn();
            break;

    }

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);

        // Signed in successfully, show authenticated UI.
        startActivity(new Intent(LoginActivity.this,MainActivity.class));
    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        // Please refer to the GoogleSignInStatusCodes class reference for more information.
        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
        Toast.makeText(this, "Authentication Failed", Toast.LENGTH_SHORT).show();
    }

}

@Override
public void onStart() {
   // Check if user is signed in (non-null) and update UI accordingly.
   GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
   if(account != null) {
       startActivity(new Intent(LoginActivity.this,MainActivity.class));
   }
    super.onStart();
}

标签: javaandroidfirebase-authentication

解决方案


推荐阅读