Firebase-为同一用户使用两个身份验证提供程序

时间:2018-10-10 11:55:36

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

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

有趣的部分是其中一个用户(具有控制台访问权限的开发人员)能够启用它,因此必须有一种方法,但我们不知道他是如何做到的。在下面的屏幕快照中与两个提供程序的用户见面。

current users on firebase

当前身份验证方法:

auth methods

编辑14/10/2018

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

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

注释中建议的第三个选项(对不同的应用程序使用不同的项目)不能被遵循,因为它们实际上是两个具有相同组件的相关应用程序。

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

因此,在此之后,我们只是放弃了,转而采用另一种方式来处理身份验证。希望以后能找到可行的方法,因为它对我们真的很有用。

3 个答案:

答案 0 :(得分:2)

  

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

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

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

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

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

答案 1 :(得分:0)

所有可用的auth方法都是可能的。但是在使用时,当用户向一个提供者注册时,他/她可以尝试登录/注册另一个提供者。如果是现有用户,则您应使用以下命令link {@ 1}到现有帐户的凭据:

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

有关更多信息,请available在这里

答案 2 :(得分:0)

可以很容易地通过以下方式完成:

    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的变化,希望对您有所帮助。