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 发布的应用程序
React-Native:从 Firebase 存储下载图像