【发布时间】:2017-10-22 20:41:21
【问题描述】:
在我的 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();
}
// ...
}
});
}
脸书:
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();
}
}
});
}
简单电子邮件:
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();
}
}
});
现在我想让 Facebook 和 Google Plus 拥有相同电子邮件的用户能够使用 Facebook 和 Google Plus 进行授权。
这个this documentation 文档说我应该跳过FirebaseAuth.signInWith 方法并调用这些函数:
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
mAuth.getCurrentUser().linkWithCredential(credential)
现在很混乱。 由于我跳过了 signInWith 方法,当它仍然为 null 时如何调用 getCurrentUser?
文档还说我处理了我不理解的合并。
currentUser = auth.signInWithCredential(credential).await().getUser();
另外,signInWithCredenial 没有await 方法。
这意味着我应该在登录后使用同一个电子邮件链接多个帐户?
【问题讨论】:
标签: android facebook firebase google-api firebase-authentication