...如果您不允许多个帐户使用相同的电子邮件地址,则用户无法创建使用电子邮件地址为ex@gmail.com的Google帐户登录的新帐户(如果已有帐户使用该帐户)电子邮件地址ex@gmail.com和密码.
我能够使用Google提供商登录已通过电子邮件提供商注册的同一封电子邮件,因此Google提供商更换了电子邮件提供商,后者无法使用FirebaseAuthInvalidCredentialsException登录:密码无效或用户没有密码..
重现步骤:
使用电子邮件提供商注册 - >注销- >使用Google提供商登录 - >退出
基本上它不应该允许将一个提供者替换为另一个提供者并抛出FirebaseAuthUserCollisionException:该电子邮件地址已被另一个帐户使用.
我用于登录/注销的一些代码:
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) …Run Code Online (Sandbox Code Playgroud) 我们在尝试解决此问题时遇到了实际问题,因此希望获得一些Firebase帮助/解决了同样问题的帮助.
该应用程序是React Native(0.43.2)并使用Firebase JS API(最新)
我们提供Facebook和Google身份验证.工作良好.
但是,如果用户:
auth/account-exists-with-different-credential
从阅读文档和SO上的一些帖子,我们认为以下是正确的,但显然不是因为我们得到了相同的身份验证错误.
...error returned by Firebase auth after trying Facebook login...
const email = error.email;
const pendingCred = error.credential;
firebase.auth().fetchProvidersForEmail(email)
.then(providers => {
//providers returns this array -> ["google.com"]
firebase.auth().signInWithCredential(pendingCred)
.then(result => {
result.user.link(pendingCred)
})
.catch(error => log(error))
Run Code Online (Sandbox Code Playgroud)
对signInWithCredential的调用抛出相同的错误auth/account-exists-with-different-credential.
任何人都可以帮助指出我们在这个实现中做错了什么吗?非常感激.
我希望我的用户可以使用许多不同的提供商登录,但如果他们只使用一个电子邮件地址,他们将获得相同的结 例如,在stackoverflow中我可以通过Facebook,Google登录...但我仍然可以保留我的个人资料以及我的帖子......
在Firebase Web中,例如,如果我的用户使用电子邮件/密码提供商创建了帐户,则他的电子邮件="ex@gmail.com"password ="123456".此帐户有uid ="account1",我使用此uid作为密钥在Firebase数据库中存储有关他的其他信息.
有一天,他选择由Google提供商和Facebook提供商登录(仍然是ex@gmail.com),我在auth设置中测试了2个案例:
"防止使用相同的电子邮件地址创建多个帐户":新的Google登录将覆盖旧的"account1",由于错误,我无法使用"ex@gmail.com"创建新的Facebook帐户:"已存在相同的帐户电子邮件地址".这两个我都不想发生
"允许使用相同的电子邮件地址创建多个帐户":使用此选项我可以使用相同的电子邮件地址创建许多帐户,但他们有不同的uid,我不知道如何将这些uid链接到"account1"?在Google和Facebook登录后,我也无法收到电子邮件(email = null).
所以firebase可以帮助我在很多应用程序中做我喜欢的事情(通过许多不同方式登录但结果相同)?
firebase angularfire firebase-authentication firebase-realtime-database