java - 我如何将来自谷歌登录的凭据存储在 Firebase 身份验证中以用于将来的登录
问题描述
我创建了一个标准的登录和注册页面,并添加了一个使用自定义 GogleSignInButton 使用谷歌帐户登录的替代方法。
该按钮工作良好。我能够选择一个 google 帐户并登录,但凭据不会反映在 firebase 身份验证控制台中,也不会像使用标准 firebase UI 时那样为新用户带来注册活动。我已经有一个使用电子邮件和密码的有效登录名(如果有帮助的话)。
我希望在实施凭据存储和使用 Google 帐户注册新用户方面获得帮助。
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();
}
解决方案
推荐阅读
- kubernetes - 可以在 kubernetes 本地集群中动态创建 pod 吗?
- javafx-8 - 如何用Java创建天球
- amazon-web-services - Amazon Serverless Application Model (SAM) 有条件地包含在模板中
- regex - 正则表达式 - 接受基本拉丁语中的字符,除了一个
- xgboost - SageMaker XGBoost 超参数调优与 XGBoost python 包
- python - Py2PDF PdfFileWriter - 拆分 PDF 是附加文件而不是保存自己的文件
- docker - Redis 在 minikube 中不使用配置文件
- powershell - 使用 ARM 模板和 DSC 部署 Azure VM 和用户
- ios - 如何通过 Xcode 在我的应用程序中使用 San Francisco Pro 字体?
- r - 为什么裁剪栅格堆栈会更改图层名称?