firebase react-native:通过电话身份验证将匿名用户转换为永久用户

Posted

技术标签:

【中文标题】firebase react-native:通过电话身份验证将匿名用户转换为永久用户【英文标题】:firebase react-native: convert anonymous user to a permanent user via phone auth 【发布时间】:2019-11-05 16:12:59 【问题描述】:

我的 react-native 应用程序允许用户使用 firebase 匿名登录。之后,我希望允许用户通过 firebase phone auth 创建一个帐户并将这个匿名帐户转换为永久帐户。

根据firebase提供的api和文档,我认为这是可能的

匿名帐户创建: https://rnfirebase.io/docs/v5.x.x/auth/reference/auth#signInAnonymously

电话身份验证创建和检索凭据: https://rnfirebase.io/docs/v5.x.x/auth/reference/PhoneAuthProvider#credential

将现有用户与新凭据相关联: https://rnfirebase.io/docs/v5.x.x/auth/reference/User#linkWithCredential

https://firebase.google.com/docs/auth/web/account-linking

这就是我所做的

匿名帐户创建:

const user: uid: userID = await firebase.auth().signInAnonymously();

// successfully created and save this user's id

让用户进行身份验证并获取手机身份验证凭据:

const credential = firebase.auth.PhoneAuthProvider.credential(verificationId, code);

此时我将拥有一个有效的凭据和一个准备好链接的现有匿名用户

然后我将电话身份验证凭据提供给我的匿名用户以进行链接

const authUser = await firebaseAuth.currentUser.linkWithCredential(credential);

我希望根据我的输入成功链接,但我得到了错误,我得到的错误是

Error: This credential is already associated with a different user account.

错误代码为:ERROR_CREDENTIAL_ALREADY_IN_USE

ERROR_CREDENTIAL_ALREADY_IN_USE 下的文档中,他们确实提到了:

如果您通过将 Google 凭据链接到匿名用户并将其升级为 Google 用户并且使用的 Google 凭据已与现有 Firebase Google 用户相关联,则可能会引发此错误。字段 error.email、error.phoneNumber , 并且可能会提供 error.credential (AuthCredential),具体取决于凭证的类型。您可以通过 auth#signInWithCredential 直接使用 error.credential 登录来从此错误中恢复。

但是我一直没能在error对象下找到error.credential从错误中恢复过来。

我见过许多将匿名用户与其他身份验证提供程序链接的工作示例,但从未见过将 firebase 匿名用户与 firebase 电话身份验证凭据链接。有谁知道是否支持这种类型的链接?谁能指出我在这里做错了什么?

【问题讨论】:

【参考方案1】:

跟进:

所以我实际上发现我的代码确实有效,这就是您实现 firebase 匿名用户 -> firebase 电话身份验证帐户链接的方式。

这对我不起作用的原因是......对于我们的应用程序,每次用户输入确认码时,我们都有一个微服务在后端创建帐户。事后看来,我真的应该仔细检查我们自己的代码库,吸取教训。

【讨论】:

以上是关于firebase react-native:通过电话身份验证将匿名用户转换为永久用户的主要内容,如果未能解决你的问题,请参考以下文章

firebase react-native 推送通知适用于 iOS 发布版本,但不适用于通过 App Store 发布的应用程序

解析 Firebase 模块(React-Native)

React-Native:从 Firebase 存储下载图像

Firebase 和 react-native 集成

在 react-native 和 firebase 3.1 中登录 Facebook

React-Native:如何在 Airbnb 地图上渲染来自 firebase 的标记列表?