在 Firebase 中关联多个帐户

Posted

技术标签:

【中文标题】在 Firebase 中关联多个帐户【英文标题】:Link Multiple accounts in Firebase 【发布时间】:2018-05-10 02:39:42 【问题描述】:

我已经被这个问题困扰了很长时间,我决定在这里发布我的问题。

我的问题是在 Firebase 中合并帐户(Facebook 和 Google)。独立注册其中任何一个都可以正常工作。

起初,当用户使用 google 注册,然后使用 Facebook(与 google 具有相同的电子邮件地址)时,它会抛出错误。正如您在下面的代码中看到的那样,我设法处理了错误,但我不知道如何合并两个帐户。

这是我到目前为止所做的:

facebookSignin: function() 
  var self = this
  firebase.auth().signInWithPopup(facebookProvider).then(function(result) 
      var token = result.credential.accessToken;
      var user = result.user;
      self.registerProfile()
  ).catch(function(error) 
      var errorCode = error.code;
      var errorMessage = error.message;
      console.log("ERROR:" + error)
      console.log("email is : " + error.email)

      if (errorCode == 'auth/account-exists-with-different-credential') 
          firebase.auth().fetchProvidersForEmail(error.email).then(providers => 
                 //providers returns this array -> ["google.com"]
                 console.log("Providers:" + providers)
                 console.log("Credential: " + JSON.stringify(error.credential))

                 firebase.auth().currentUser.link(error.credential).then(function(user) 
                      console.log("Account linking success", user);
                  );
          ).catch(function(error)
              console.log("error:" + error)
          )
      
      console.log("error code:" + error.code+ "error msg:" + error.message)
  );
    首先我已经注册了谷歌 现在我想用相同的电子邮件地址登录 Facebook 我得到当前用户 null 显然是因为用户没有登录,这是错误:error:TypeError: __WEBPACK_IMPORTED_MODULE_1_firebase___default.a.auth(...).currentUser is null

我阅读了有关合并部分的文档,但仍然无法弄清楚这一点。 https://firebase.google.com/docs/auth/web/account-linking#link-federated-auth-provider-credentials-to-a-user-account

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

在您fetchProvidersForEmail 并找出现有的 Google 用户后,您必须先登录该现有帐户:

firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider().setCustomParameters(login_hint: error.email)...

完成之后,你接着:

firebase.auth().currentUser.linkWithCredential(error.credential)

因此,用户必须先验证现有帐户的所有权,然后才能关联 Facebook 帐户。

【讨论】:

以上是关于在 Firebase 中关联多个帐户的主要内容,如果未能解决你的问题,请参考以下文章

使用 gcloud 服务帐户登录到 Firebase

如何通过 firebase 托管在 firebase 上托管 node.js Web 应用程序(包含多个文件夹)?

如何在启用电话身份验证的情况下导出 Firebase 用户帐户

在 sequelize 中关联两个表

Firebase:防止在多个设备上使用相同的帐户

使用firebase验证用户注册