【问题标题】:Firebase - use two authentication providers for same userFirebase - 为同一用户使用两个身份验证提供程序
【发布时间】:2018-10-10 11:55:35
【问题描述】:

对于包含两个不同应用程序的 Firebase 项目,我需要在 Firebase 用户上激活两个不同的身份验证提供程序。 目前我可以设置(通过控制台)谷歌登录提供程序邮件/密码提供程序,但不能同时在同一个用户上。

有趣的是,其中一位用户(具有控制台访问权限的开发人员)已经能够启用它,所以一定有办法,但我们无法弄清楚他是如何做到的。在下面的屏幕截图中查看使用这两个提供商的用户。

当前的身份验证方法:

编辑 2018 年 10 月 14 日

“每个电子邮件地址一个帐户”设置已禁用。没运气。 我们试过这个:https://firebase.google.com/docs/auth/android/account-linking

但似乎我们无法使其与节点 js 一起使用。

cmets 中建议的第三个选项(对不同的应用使用不同的项目)不能遵循,因为这实际上是两个相关的应用,具有一些共同的组件。

在进行一些故障排除后,恐怕我会添加一些更奇怪的东西: 1)禁用“每个电子邮件地址一个帐户”选项后,我尝试删除我的帐户,然后使用电子邮件\密码再次添加它,这成功了。然后我尝试在应用程序中使用谷歌登录:登录失败但在 firebase 中我能够看到一个新的“空”(无电子邮件)用户,具有新的 UID。 然后我删除了所有帐户并尝试在应用程序中使用 google 登录(通常它会在 firebase 中创建帐户),结果:登录失败,创建了空帐户。删除了,尝试在控制台手动创建,结果:“账号已经存在”。

因此,在此之后,我们就放弃了并采用了不同的方式来处理身份验证。希望将来能找到它,因为它对我们非常有用。

【问题讨论】:

  • 您认为这是 firebase 身份验证中的错误?

标签: firebase authentication google-cloud-platform google-cloud-firestore


【解决方案1】:

目前我可以(通过控制台)设置 Google 登录提供程序或邮件/密码提供程序,但不能同时在同一个用户上设置。

听起来您启用了 每个电子邮件地址一个帐户 设置(这是默认设置)。启用此功能后,每个电子邮件地址只能有一个帐户。因此,如果用户首先使用电子邮件+密码登录,然后该用户尝试使用其 Google 帐户登录同一电子邮件,则第二次登录将被拒绝。这是此设置的预期行为,旨在防止一个用户获得多个帐户。

支持用户使用多个提供商登录的推荐方法是将他们的电子邮件+密码和 Google 帐户链接在一起,如 documentation on linking accounts 所示。

因此,您必须选择以下选项之一:

  1. 禁用Sign-in method screen 中的“每个电子邮件地址一个帐户”设置。
  2. 启用帐户链接,如果这确实是单个用户使用两个提供商登录,这是首选方法。
  3. 为每个应用程序使用单独的项目,如果应用程序不相关或将被用户视为单独的应用程序,这是首选方法。例如:如果您有一个普通应用程序和一个管理员用户应用程序,它们应该在同一个项目中。但如果您有两个不同的游戏,它们不应该使用同一个项目。

【讨论】:

    【解决方案2】:

    所有可用的身份验证方法都是可能的。但是在使用时,当用户注册一个提供商时,他/她可以尝试注册/注册另一个提供商。如果现有用户,那么您应该link 现有帐户的凭据:

    auth.currentUser.linkWithPopup(provider).then((result)=>{
        var user = result.user 
    }).catch((error)=> {
       // Handle Errors here.
       // ...
    });
    

    更多信息available在这里

    【讨论】:

      【解决方案3】:

      可以通过以下方式轻松完成:

          var provider = new firebase.auth.GoogleAuthProvider();
          firebase.auth().currentUser.linkWithPopup(provider).then(function(result) {
            var credential = result.credential;
            var user = result.user;
          }).catch(function(error){
          });
        }
      

      使用电子邮件登录后,另一个按钮可用于通过使用onclick="linkWithPopup()" 链接帐户,这会创建一个弹出框,允许用户与另一个帐户/提供商链接。 您会看到 firebase 的变化,希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2020-08-21
        • 2017-02-21
        • 2021-02-28
        • 2018-10-31
        • 2018-02-25
        • 2016-12-19
        • 1970-01-01
        • 2017-04-16
        相关资源
        最近更新 更多