首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“每个电子邮件地址一个帐户”时使用FirebaseAuthInvalidCredentialsException

使用“每个电子邮件地址一个帐户”时使用FirebaseAuthInvalidCredentialsException
EN

Stack Overflow用户
提问于 2016-06-03 17:03:39
回答 2查看 5K关注 0票数 10

..。如果您不允许具有相同电子邮件地址的多个帐户,则如果已经有一个在使用电子邮件地址ex@gmail.com和密码中签名的帐户,用户就不能创建一个新帐户。

我能够与谷歌提供商签收同一封已经通过电子邮件提供商注册的电子邮件,因此谷歌提供商取代了电子邮件提供商,而后者则无法用FirebaseAuthInvalidCredentialsException:登录密码,密码无效或用户没有密码。

复制步骤:

与电子邮件提供商 ->签约 ->与谷歌提供商 ->签约

基本上,它不应该允许将一个提供者替换为另一个提供者,然后抛出FirebaseAuthUserCollisionException:,电子邮件地址已经被另一个帐户使用了。

一些用于登录/注销的代码:

代码语言:javascript
复制
  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();
  }

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-06-06 17:17:48

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

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2016-06-04 17:08:36

每个电子邮件地址的多个帐户将创建一个新用户,使用相同的电子邮件为不同的提供者使用不同的uid。

重新创造:

  1. 使用google电子邮件x@x登录
  2. 登录facebook电子邮件x@x
  3. 创建电子邮件密码帐户x@x

现在,您将得到3个不同的用户。

如果您在每个电子邮件中使用强烈推荐的单个帐户,那么上面的3个提供者将位于同一个用户(一个uid)内。

当您第一次创建google x@x并尝试使用电子邮件x@x登录新的facebook帐户时,您将得到一个错误,即进行链接是必需的。然后,您将不得不登录第一个google用户,并将新的facebook用户链接到它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37619911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档