【发布时间】:2016-10-03 20:19:14
【问题描述】:
...如果您不允许多个帐户使用同一电子邮件 地址,用户无法创建使用 电子邮件地址为 ex@gmail.com 的 Google 帐户(如果已有) 使用电子邮件地址 ex@gmail.com 和 密码。
我能够使用 Google 提供商登录已通过电子邮件提供商注册的同一电子邮件,因此 Google 提供商替换了电子邮件提供商,然后后者无法使用 FirebaseAuthInvalidCredentialsException 登录:密码无效或用户没有密码。。
重现步骤:
向电子邮件提供商注册 -> 退出 -> 使用 Google 提供商登录 -> 退出
基本上它不应该允许将一个提供商替换为另一个并抛出 FirebaseAuthUserCollisionException: The email address is already in use by another account.
我用于登录/注销的一些代码:
public void signUpEmail(String email, String password) {
mFirebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, task -> {
if (!task.isSuccessful()) {
Log.e("signUpWithEmail", task.getException());
}
});
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mFirebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.e("signInWithCredential", task.getException());
}
}
});
}
public void signInEmail(String email, String password) {
mFirebaseAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, task -> {
if (!task.isSuccessful()) {
Log.e("signInWithEmail", task.getException());
}
});
}
public void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
mFirebaseAuth.signOut();
startSignInActivity();
}
谢谢!
【问题讨论】:
-
很多可能取决于这里的代码。您可以分享任何最小但完整的内容吗?
-
添加了一些代码和一些说明。
-
对于您从 firebase 获得的报价,您能否出示您的参考资料。我在网上找不到它
标签: android firebase google-signin firebase-authentication