我的react-native应用程序允许用户使用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
下的文档中,他们确实提到:
如果您通过将匿名用户链接到Google用户来升级匿名用户到Google用户,并且所使用的Google用户证书已经与现有的Firebase Google用户相关联,则可能引发此错误。error.email,error.phoneNumber字段,并且可以提供error.credential(AuthCredential),具体取决于凭据的类型。您可以通过直接通过auth#signInWithCredential使用error.credential登录来从此错误中恢复。
但是我无法在错误对象下找到error.credential以从错误中恢复过来。
我已经看到了许多将匿名用户与其他身份验证提供程序链接的有效示例,但是从未见过将Firebase匿名用户与Firebase电话身份验证凭据链接的情况。有谁知道是否支持这种类型的链接?有人可以指出我在做什么错吗?
答案 0 :(得分:0)
跟进:
所以我实际上发现我的代码确实有效,这就是您实现firebase匿名用户-> firebase电话身份验证帐户链接的方式。
这对我不起作用的原因是.....对于我们的应用程序,每当用户输入确认代码时,我们就有一个微服务在后端创建帐户。事后看来,我应该认真检查一下我们自己的代码库,这是经验教训。