在登录方式下,我已经启用了“每个电子邮件地址多个帐户”。
我具有连接到Google帐户和Microsoft帐户的相同电子邮件地址-因此,我已经能够成功使用Google和Microsoft登录方法在同一个Firebase实例上创建两个单独的用户。
我无法执行的操作是为“电子邮件/密码”方法创建另一个帐户。如果尝试通过控制台(添加电子邮件/密码用户)添加它,则会收到“已经存在”错误,如果尝试通过管理SDK添加它,则会出现一般错误。
能否请您告知我尝试做的事情是否可行,如果可以,我应该怎么做?
编辑:我应该明确地说-问题是允许多个共享相同电子邮件地址的帐户(未链接且完全独立),而不是允许单个Firebase帐户连接多个提供商。
编辑2:我已将第一个回答标记为答案-出于安全原因,我认为当已经有来自受信任提供商的帐户(例如, google.com),因此我们采用了一种方法,即在响应中概述的一个帐户上将多个提供者标记为答案。
答案 0 :(得分:0)
是的,电子邮件和密码凭据可能已链接到现有的Firebase帐户。 Firebase Web文档描述了以下过程。
Link email address and password credentials to a user account
要将电子邮件地址和密码凭据添加到现有用户帐户,请执行以下操作:
- 使用任何身份验证提供程序或方法登录用户。
- 提示用户输入电子邮件地址和新密码。
- 使用电子邮件地址和密码创建一个
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); });