如何将多个Auth提供程序链接到Firebase帐户?

jas*_*san 11 facebook web-applications firebase firebase-authentication

我无法成功完成,我按照Firebase文档中的说明执行了以下步骤:

  1. 使用现有的身份验证提供程序(我的情况:facebook)签名使用.
  2. 完成新身份验证提供程序的登录流程,但不包括调用其中一种Auth.signInWith方法.(我的情况:我想链接电子邮件和密码以及Google OAUth).所以这是我不清楚的步骤,我创建了一个新的提供者var provider = new firebase.auth.GoogleAuthProvider(); ,我没有这样做Firebase.auth().signInWithPopup(provider).
  3. 然后为了获得谷歌的authcredential我运行var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token);(我得到一个未定义的googleUser错误)这个错误似乎是合适的,因为我没有使用谷歌Oauth登录,但那是第二步说明(不要登录)
  4. 然后使用此命令链接Facebook提供商上的当前用户 auth.currentUser.link(credential)

我的理解是currentUser需要链接到我现有的Provider(Facebook).似乎谷歌的凭证变量从未被计算过.任何有功能代码示例的人都会提供帮助.

boj*_*eil 9

如果您想手动将google和email/pass帐户链接到现有的仅限facebook的firebase用户,您可以执行以下操作:首先,用户应该登录到facebook.链接谷歌用户:

var provider = new firebase.auth.GoogleAuthProvider();
auth.currentUser.linkWithPopup(provider);
Run Code Online (Sandbox Code Playgroud)

然后链接电子邮件/通行证帐户:

auth.currentUser.linkWithCredential(firebase.auth.EmailAuthProvider.credential(auth.currentUser.email, 'password'))
Run Code Online (Sandbox Code Playgroud)

要链接的所有这些帐户必须是新的且尚未链接.

  • @bojeil此外,如果用户在使用Facebook登录后**已登出**,然后决定使用Google登录,该怎么办?我可以将他与谷歌联系起来吗? (3认同)
  • 如果您已经拥有 oauth 凭证,则使用 linkWithCredential。这里的优点是您不需要打开弹出窗口或重定向。如果您在项目设置中设置了“每封电子邮件一个帐户”。如果用户最初使用电子邮件登录,然后使用返回相同电子邮件的 OAuth 提供商登录,则后端将抛出该帐户存在的错误。您必须登录第一个帐户,然后将 OAuth 提供程序帐户链接到该帐户。 (2认同)
  • Google是一种特殊情况,因为拥有Google电子邮件的用户被视为已验证(Google发行了该帐户),并且无需链接即可覆盖现有的Facebook帐户。 (2认同)