gpt4 book ai didi

android - 使用 "One account per email address"时出现 FirebaseAuthInvalidCredentialsException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:37 27 4
gpt4 key购买 nike

... if you don't allow multiple accounts with the same email address, a user cannot create a new account that signs in using a Google Account with the email address ex@gmail.com if there already is an account that signs in using the email address ex@gmail.com and a password.

我能够使用已通过电子邮件提供商注册的同一电子邮件登录 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)
.addOnCompleteListener(this, task -> {
if (!task.isSuccessful()) {
Log.e("signInWithEmail", task.getException());
}
});
}

public void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
mFirebaseAuth.signOut();
startSignInActivity();
}

谢谢!

最佳答案

为了优化登录 UI 步骤并增强帐户安全性,Firebase 身份验证有一个“可信提供者”的概念,其中身份提供者也是电子邮件服务提供者。例如,Google 是@gmail.com 地址的可信提供商,Yahoo 是@yahoo.com 地址的可信提供商,而 Microsoft 是@outlook.com 地址的可信提供商。

在“每个电子邮件地址一个帐户”模式下,Firebase 身份验证会尝试根据电子邮件地址链接帐户。如果用户从受信任的提供商登录,用户会立即登录帐户,因为我们知道用户拥有该电子邮件地址。

如果现有帐户具有相同的电子邮件地址但使用其他凭据(例如密码或不受信任的提供商)创建,则出于安全原因将删除以前的凭据。

网络钓鱼者(不是电子邮件地址所有者)可能会创建初始帐户 - 删除初始凭据将阻止网络钓鱼者随后访问该帐户。合法用户可以通过密码重置流程设置密码,她需要证明她拥有该电子邮件地址。

关于android - 使用 "One account per email address"时出现 FirebaseAuthInvalidCredentialsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37619911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com