我的react原生应用程序允许用户使用firebase匿名登录。在那之后,我希望让用户通过firebase电话身份验证创建一个帐户,并将这个匿名帐户转换为一个永久帐户。
基于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
下的文档中,他们确实提到:
如果您通过将谷歌凭据链接到匿名用户来将匿名用户升级为谷歌用户,并且使用的谷歌凭据已经与现有的Firebase相关联,则可能会抛出此错误。根据凭据的类型,可能会提供error.email、error.phoneNumber和error.credential (AuthCredential)字段。您可以通过auth#signInWithCredential直接登录error.credential来从此错误中恢复。
但是我还没能在error对象下找到要从错误中返回的error.credential。
我见过许多将匿名用户与其他身份验证提供商链接的工作示例,但从未见过firebase匿名用户与firebase电话身份验证之间的链接。有没有人知道是否支持这种类型的链接?谁能指出我在这里做错了什么?
发布于 2019-06-26 18:44:44
跟进:
因此,我发现我的代码确实可以工作,这就是实现firebase匿名用户-> firebase电话身份验证帐户链接的方式。
这对我不起作用的原因是因为……对于我们的应用程序,我们有一个微服务,每次用户输入确认码时,都会在后端创建帐户。事后看来,我真的应该仔细检查一下我们自己的代码库,吸取教训。
https://stackoverflow.com/questions/56726661
复制