【问题标题】:FirebaseAuth: How to change phone number already linked to a provider?FirebaseAuth:如何更改已链接到提供商的电话号码?
【发布时间】:2020-11-24 13:14:56
【问题描述】:

我正在开发一个使用 Firebase 身份验证的 Flutter 应用程序。我在注册过程中使用了多个提供商和电话验证。

我想为用户提供更改与其电子邮件 ID 相关联的电话号码的选项。但为此,我需要再次验证号码。我在这样做时遇到了麻烦。

我正在使用unlinkFromProvider 函数,然后使用linkWithCredential 再次链接它。 这是它的代码。

FirebaseUser _firebaseUser = await _auth.currentUser();
var credential = PhoneAuthProvider.getCredential(
  smsCode: smsCode,
  verificationId: verificationId,
);
await _firebaseUser.unlinkFromProvider(_firebaseUser.providerId);
result = await _firebaseUser.linkWithCredential(credential);

但是在这样做时,我收到了这个错误

ERROR_NO_SUCH_PROVIDER:用户未链接到给定提供商的帐户。

我认为这意味着提供者 ID 可能有误。

如何获得正确的提供商 ID?我做错了吗?

如果是,那么正确的做法是什么?

感谢您的宝贵时间!

【问题讨论】:

  • @FrankvanPuffelen 感谢您的帮助,我会标记对我有帮助的答案,只是因为某些优先事项我转移到其他事情上,所以我没有太多时间来完成这项任务。

标签: firebase flutter dart firebase-authentication


【解决方案1】:

您不应取消与提供商的关联以重新验证用户的电话号码。相反,您应该使用重新验证凭据 reauthenticate the user

之后,您可以拨打updatePhoneNumber to update the number

【讨论】:

  • 嘿弗兰克,我在这里面临一个问题,在没有电话验证过程的情况下,号码在 firebase 中更新。如果我在更改号码之前进行了验证过程,那么我会收到一条错误消息,提示提供者已链接,是否有解决此问题的方法?
  • 嗯....我不知道那里发生了什么。如果您显示(此处或在新问题中)minimal code that reproduces thats problem.,那就太好了
【解决方案2】:

您需要在providerData 列表中进行迭代以获得正确的providerId

      FirebaseUser user = await FirebaseAuth.instance.currentUser();
      user.providerData.forEach((element) {
        element.providerId;
      });

_firebaseUser.providerId很可能返回firebase,当你在providerData中迭代时,你会得到provideridphone,然后你可以取消链接。

【讨论】:

  • 感谢 Peter 的帮助,虽然我使用了其他方法来解决问题,但感谢您分享知识!
猜你喜欢
  • 2019-12-24
  • 2021-04-24
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
相关资源
最近更新 更多