firebase react-native:通过 phone auth 将匿名用户转换为永久用户
firebase react-native: convert anonymous user to a permanent user via phone auth
我的 react-native 应用程序允许用户使用 firebase 匿名登录。之后我希望允许用户通过 firebase phone auth 创建一个帐户并将这个匿名帐户转换为永久帐户。
根据 firebase
提供的 api 和文档,我认为这是可能的
匿名账户创建:
https://rnfirebase.io/docs/v5.x.x/auth/reference/auth#signInAnonymously
phone 授权创建和检索凭证:
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
让用户进行身份验证并获取 phone 身份验证凭据:
const credential = firebase.auth.PhoneAuthProvider.credential(verificationId, code);
此时我将拥有一个有效的凭据和一个可以链接的现有匿名用户
然后我向我的匿名用户提供 phone 身份验证凭据以进行链接
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 user.The 字段 error.email、error.phoneNumber 和 error.credential (AuthCredential),具体取决于凭证的类型。您可以通过 auth#signInWithCredential.
直接使用 error.credential 登录来从此错误中恢复
但是我一直没能在错误对象下找到error.credential从错误中回来
我见过许多将匿名用户与其他身份验证提供程序链接起来的工作示例,但从未见过将 firebase 匿名用户与 firebase phone 身份验证凭证链接起来的例子。有谁知道是否支持这种类型的链接?谁能指出我在这里做错了什么?
跟进:
所以我实际上发现我的代码确实有效,这就是您实现 firebase 匿名用户 -> firebase phone 身份验证帐户链接的方式。
这对我不起作用的原因是......对于我们的应用程序,每次用户输入确认码时,我们都会在后端创建帐户 micro-service。事后看来,我真的应该仔细检查我们自己的代码库,吸取教训。
我的 react-native 应用程序允许用户使用 firebase 匿名登录。之后我希望允许用户通过 firebase phone auth 创建一个帐户并将这个匿名帐户转换为永久帐户。
根据 firebase
提供的 api 和文档,我认为这是可能的匿名账户创建: https://rnfirebase.io/docs/v5.x.x/auth/reference/auth#signInAnonymously
phone 授权创建和检索凭证: 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
让用户进行身份验证并获取 phone 身份验证凭据:
const credential = firebase.auth.PhoneAuthProvider.credential(verificationId, code);
此时我将拥有一个有效的凭据和一个可以链接的现有匿名用户
然后我向我的匿名用户提供 phone 身份验证凭据以进行链接
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 user.The 字段 error.email、error.phoneNumber 和 error.credential (AuthCredential),具体取决于凭证的类型。您可以通过 auth#signInWithCredential.
直接使用 error.credential 登录来从此错误中恢复但是我一直没能在错误对象下找到error.credential从错误中回来
我见过许多将匿名用户与其他身份验证提供程序链接起来的工作示例,但从未见过将 firebase 匿名用户与 firebase phone 身份验证凭证链接起来的例子。有谁知道是否支持这种类型的链接?谁能指出我在这里做错了什么?
跟进:
所以我实际上发现我的代码确实有效,这就是您实现 firebase 匿名用户 -> firebase phone 身份验证帐户链接的方式。
这对我不起作用的原因是......对于我们的应用程序,每次用户输入确认码时,我们都会在后端创建帐户 micro-service。事后看来,我真的应该仔细检查我们自己的代码库,吸取教训。