在 React Native 中没有电子邮件的 Firebase 重置密码

Firebase reset password without email in React Native

大家好,所有社区伙伴... 我正在使用 firebase 作为我的 React Native 应用程序的后端。在注册时,我要求用户提供他们的 phone 号码和电子邮件以及其他必需的详细信息,这些信息存储在一个集合中。出于某种目的,我决定不使用电子邮件进行用户身份验证,而是使用 phone 号码制作了自己的 "type" 电子邮件,看起来像 phonenumber@domain.com(03658965280@gmail.com)

一切都按预期工作,直到我遇到密码重置功能。在密码重置屏幕上,如果我要求用户输入他们的 phone 号码并使用该 phone 号码,从集合中获取该用户的电子邮件。现在我得到了用户的电子邮件,我可以使用下面的代码发送密码重置 link.

forgotPassword = (Email) => {
    firebase.auth().sendPasswordResetEmail(Email)
      .then(function (user) {
        alert('Please check your email...')
      }).catch(function (e) {
        console.log(e)
      })
  }

现在我怀疑它不会发送密码重置电子邮件,因为我已经制作了自己的电子邮件版本,并且当提供给上述功能的电子邮件将被带到 firebase 进行交叉检查时,它将无法验证该电子邮件是正确的,因此导致不发送电子邮件。

请在这方面指导我,如果我的想法有误,请告诉我!

由于您创建了无效(或不存在)的电子邮件地址,内置的电子邮件验证和密码重置选项确实对您不起作用。

我能想到的几个主要方案:

  1. 分别存储电子邮件地址和phone号码。老实说,这是最好的解决方案,因为它会清除无效数据。如果用户需要能够使用 phone 号码或电子邮件+密码登录,您可以向这两个提供商注册,然后 link this accounts together.
  2. 实现您自己的密码重置电子邮件发送,以便您可以拆分电子邮件。您仍然可以通过 generating the link with the Admin SDK 使用 Firebase 的验证处理程序,但随后使用您自己的电子邮件发送脚本(和 SMTP 服务器)发送它。
  3. 以有效格式存储电子邮件+phone 号码。例如,此电子邮件地址 username+03658965280@domain.com 实际上是 username@domain.com 的有效别名。所以在这种格式下你可以将 phone 号码存储在电子邮件地址中,并且仍然使用内置的密码重置和电子邮件验证。