Mr.*_*r.D 4 android facebook google-api firebase firebase-authentication
在我的 firebase 仪表板中,我设置了multiple accounts for one email选项。
我的应用程序中有简单的电子邮件、Facebook 和 Google Plus 身份验证。
我在 LoginActivity 中像这样处理它们中的每一个:
谷歌加:
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
dialog.dismiss();
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
FirebaseUser user = mAuth.getCurrentUser();
proceed();
} else {
// If sign in fails, display a message to the user.
Toast.makeText(LoginActivity.this, task.getException().getMessage(),
Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
Run Code Online (Sandbox Code Playgroud)
Facebook:
private void handleFacebookAccessToken(AccessToken token) {
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
dialog.show();
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
dialog.dismiss();
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
FirebaseUser user = mAuth.getCurrentUser();
proceed();
} else {
Toast.makeText(LoginActivity.this, task.getException().getMessage(),
Toast.LENGTH_SHORT).show();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
简单的电子邮件:
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
dialog.dismiss();
proceed();
} else {
Toast.makeText(LoginActivity.this, "Wrong email or password", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在我想让拥有相同电子邮件的 Facebook 和 Google Plus 的用户能够使用 Facebook 和 Google Plus 进行授权。
这本文档文档说我应该跳过FirebaseAuth.signInWith方法和调用这些函数:
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
mAuth.getCurrentUser().linkWithCredential(credential)
Run Code Online (Sandbox Code Playgroud)
现在有困惑。由于跳过了 signInWith 方法,当 getCurrentUser 仍然为 null 时如何调用它?
文档还说我处理了我不明白的合并。
currentUser = auth.signInWithCredential(credential).await().getUser();
Run Code Online (Sandbox Code Playgroud)
此外, signInWithCredenial 没有await方法。
这意味着我应该在登录后将多个帐户与相同的电子邮件联系起来吗?
要链接帐户,应该有一个现有的会话。例如,假设新用户使用 Google 作为身份验证提供商创建了一个帐户。
总之,要做到这一点,您需要:
该过程与 Facebook 等其他身份验证提供商类似。为了将帐户与 Facebook 关联,您需要执行上述前三个步骤(与Facebook身份验证相关),但您需要调用“linkWithCredential”而不是“signInWithCredential”。如果一切顺利,现在用户将能够通过 Google 或 Facebook 对同一帐户进行身份验证。
如果您调用“signInWithCredential”,您将创建一个使用 Facebook 作为身份验证提供程序的新帐户。因此,用户无法访问具有两个(或更多)身份验证提供程序的单个帐户,该用户将为每个身份验证提供程序拥有两个单独的帐户。这就是文档说您应该跳过调用 FirebaseAuth.signInWith 方法的原因。
关于您关于合并的问题,文档中提到:“如果凭据已链接到另一个用户帐户,则对 linkWithCredential 的调用将失败”。这意味着用户已经拥有身份验证提供程序的帐户。如果您希望用户访问来自两个帐户的信息,您将需要创建将信息从一个帐户合并到另一个帐户的逻辑。
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |