firebase - Firebase:当该电子邮件已用于 Google、Microsoft 等帐户时,是否可以添加新的电子邮件/密码帐户?
问题描述
在登录方法下,我已经启用了“每个电子邮件地址多个帐户”。
我有同一个电子邮件地址连接到 Google 帐户和 Microsoft 帐户 - 所以我已经成功地能够使用 Google 和 Microsoft 登录方法在同一个 Firebase 实例上创建两个单独的用户。
我不能做的是为电子邮件/密码方法创建另一个帐户。如果我尝试通过控制台添加它(添加电子邮件/密码用户),我会收到“已经存在”错误,如果我尝试通过管理 SDK 添加它,则会收到一般错误。
您能否告知我尝试做的事情是否可行,如果可以,我应该怎么做?
编辑:我应该说清楚 - 问题是关于允许共享同一电子邮件地址的多个(未链接且完全独立的)帐户,而不是连接到多个提供商的单个 Firebase 帐户。
编辑 2:我已将第一个响应标记为答案 - 我假设,出于安全原因,当已经有来自受信任的提供商(例如 google.com)的帐户时,不可能简单地添加电子邮件/密码帐户),因此我们采用了在一个帐户上拥有多个提供商的方法,如标记为答案的响应中所述。
解决方案
是的,电子邮件和密码凭据可能与现有 Firebase 帐户相关联。Firebase 网络文档描述了该过程,如下所示。
将电子邮件地址和密码凭据链接到用户帐户
要将电子邮件地址和密码凭据添加到现有用户帐户:
- 使用任何身份验证提供程序或方法登录用户。
- 提示用户输入电子邮件地址和新密码。
AuthCredential
使用电子邮件地址和密码创建一个对象:var credential = firebase.auth.EmailAuthProvider.credential(email, password);
- 将
AuthCredential
对象传递给登录用户的linkWithCredential
方法:firebase.auth().currentUser.linkAndRetrieveDataWithCredential(credential).then(function(usercred) { var user = usercred.user; console.log("Account linking success", user); }, function(error) { console.log("Account linking error", error); });
linkWithCredential
如果凭据已链接到另一个用户帐户,则调用将失败。在这种情况下,您必须根据应用程序的需要处理合并帐户和关联数据:// Get reference to the currently signed-in user var prevUser = auth.currentUser; // Sign in user with another account auth.signInWithCredential(credential).then(function(user) { console.log("Sign In Success", user); var currentUser = user; // Merge prevUser and currentUser data stored in Firebase. // Note: How you handle this is specific to your application // After data is migrated delete the duplicate user return user.delete().then(function() { // Link the OAuth Credential to original account return prevUser.linkWithCredential(credential); }).then(function() { // Sign in with the newly linked credential return auth.signInWithCredential(credential); }); }).catch(function(error) { console.log("Sign In Error", error); });
推荐阅读
- python - 检查变量是否为正整数的最紧凑/Pythonic 方法,可能的变量类型是任何变量类型,包括布尔值
- sql-server - 三表连接的group by中的列中断总和
- python - 使用基本 python 将数字列表中的连续数字分组到元组列表中(不允许使用 itertools 或更多 itertools)
- python - PyCharm 无法调试 Qt5 (PySide2) 代码 - 错误“Shiboken.ObjectType”对象不可迭代
- javascript - Html 按钮无法触发与 Document.clear 同名的事件函数
- c - 使用归并排序的多线程
- groovy - soapUI Groovy 脚本中的意外标记
- javascript - 当超链接在数据源中时,单击按钮打开超链接
- firebase - 我需要使用颤振和 firebase 添加电子邮件/密码身份验证
- imagej - 如何从 imagej - fiji 中的交叉点数组重新创建边界?