对于包含两个不同应用程序的Firebase项目,我需要在Firebase用户上激活两个不同的身份验证提供程序。 目前,我可以(通过控制台)设置Google登录提供程序 OR 邮件/密码提供程序,但永远不能在同一用户上同时设置。
有趣的部分是其中一个用户(具有控制台访问权限的开发人员)能够启用它,因此必须有一种方法,但我们不知道他是如何做到的。在下面的屏幕快照中与两个提供程序的用户见面。
当前身份验证方法:
编辑14/10/2018
“每个电子邮件地址一个帐户”设置被禁用。没运气。 我们尝试过:https://firebase.google.com/docs/auth/android/account-linking
但似乎我们无法使其与节点js一起使用。
注释中建议的第三个选项(对不同的应用程序使用不同的项目)不能被遵循,因为它们实际上是两个具有相同组件的相关应用程序。
经过一些故障排除后,恐怕我只会添加一些更奇怪的东西: 1)在禁用“每个电子邮件地址一个帐户”选项的情况下,我尝试删除我的帐户,然后使用email \ password再次添加,成功。然后,我尝试在该应用程序中使用google登录:登录失败,但是在Firebase中,我能够看到具有新UID的新“空”(无电子邮件)用户。 然后我删除了所有帐户,并尝试在应用程序中使用google登录(通常会在firebase中创建该帐户),结果:登录失败,创建了空帐户。删除它,尝试在控制台上手动创建它,结果:“帐户已存在”。
因此,在此之后,我们只是放弃了,转而采用另一种方式来处理身份验证。希望以后能找到可行的方法,因为它对我们真的很有用。
答案 0 :(得分:2)
当前,我可以(通过控制台)设置Google登录提供程序或邮件/密码提供程序,但永远不能在同一用户上同时设置。
听起来好像您已启用设置每个电子邮件地址一个帐户(这是默认设置)。启用此功能后,每个电子邮件地址只能有一个帐户。因此,如果用户首先使用email + password登录,然后该用户尝试使用其Google帐户登录同一电子邮件,则第二次登录将被拒绝。这是此设置的预期行为,旨在防止一个用户获得多个帐户。
推荐的支持用户与多个提供商进行登录的方法是将其电子邮件+密码和Google帐户链接在一起,如documentation on linking accounts所示。
因此,您必须选择以下选项之一:
答案 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的变化,希望对您有所帮助。