我们在尝试解决这个问题时遇到了真正的问题,因此希望得到一些 Firebase 的帮助/那些已经解决了同样问题的人。
该应用程序是 React Native (0.43.2) 并使用 Firebase JS API(最新)
我们提供 Facebook 和 Google 身份验证。工作正常。
但是,如果用户:
- 使用 Facebook 登录(可以)
- 稍后,使用 Google 登录(也可以)
- 稍后,尝试使用 Facebook 登录 - BOOM!不太好,Firebase 返回此错误:
auth/account-exists-with-different-credential
通过阅读文档和一些关于 SO 的帖子,我们认为以下内容是正确的,但显然不正确,因为我们得到了相同的身份验证错误。
...error returned by Firebase auth after trying Facebook login...
const email = error.email;
const pendingCred = error.credential;
firebase.auth().fetchProvidersForEmail(email)
.then(providers => {
//providers returns this array -> ["google.com"]
firebase.auth().signInWithCredential(pendingCred)
.then(result => {
result.user.link(pendingCred)
})
.catch(error => log(error))
对 signInWithCredential 的调用抛出相同的错误 auth/account-exists-with-different-credential
。
任何人都可以帮助指出我们在这个实现中做错了什么吗?非常感激。
原文由 ajonno 发布,翻译遵循 CC BY-SA 4.0 许可协议
发生的事情是 Firebase 对所有电子邮件强制使用相同的帐户。由于您已经拥有同一电子邮件的 Google 帐户,因此您需要将该 Facebook 帐户链接到 Google 帐户,以便用户可以访问相同的数据,并且下次能够使用 Google 或 Facebook 登录同一帐户。
您的代码段中的问题是您正在使用相同的凭据进行签名和链接。修改如下。当您收到错误“auth/account-exists-with-different-credential”时,该错误将包含 error.email 和 error.credential(Facebook OAuth 凭证)。您需要先查找 error.email 以获取现有的提供者。