【问题标题】:Send Verification Email When Updating Email Address in Firebase Auth在 Firebase Auth 中更新电子邮件地址时发送验证电子邮件
【发布时间】:2019-11-25 17:11:30
【问题描述】:

我试图弄清楚当现有身份验证用户尝试更新其电子邮件地址时,是否有办法从 Firebase 身份验证发送验证电子邮件。我想在实际调用“user.updateEmail(newEmail)”之前执行此操作,这样如果他们出于某种原因不应该使用该电子邮件地址,它实际上不会更改他们在 Firebase Auth 中的电子邮件登录。

“sendEmailVerification”方法似乎不允许手动提供电子邮件地址进行验证。

理想情况下,我想做这样的事情:

//User provides a newEmailAddress for their account

//Send verification email to the newEmailAddress

//User verifies newEmailAddress

user.updateEmail(newEmailAddress) is executed

有没有通过 Firebase 身份验证的优雅方式来做到这一点?

【问题讨论】:

标签: firebase firebase-authentication


【解决方案1】:

此流程的 Firebase 身份验证中没有内置任何内容。

如果您有自己的电子邮件服务器,您绝对可以实现它。但是您需要习惯于生成自己的随机数、发送电子邮件并拥有一个端点来处理电子邮件中的点击。

【讨论】:

  • 噢,真糟糕。好吧,也许有一天……还是谢谢!
  • @Frank 如果没有验证步骤,我们应该为不小心输入错误电子邮件地址的用户做些什么(即使在前端的“确认电子邮件地址”字段之后?)
  • 如果没有电子邮件验证步骤,他们的电子邮件不存在也没关系。但是,如果您想保护他们免受粗指电子邮件地址的侵害,您需要实施电子邮件验证使用已验证其电子邮件地址的提供商。
  • 这是使用类似 sendgrid 的案例吗?
  • verifyBeforeUpdateEmail 怎么样? firebase.google.com/docs/reference/js/v8/…
【解决方案2】:

其实是有办法的。您需要设置continueUrl 并调用verifyBeforeUpdateEmail,这会将用户重定向到您的应用程序。 DynamicLink 将包含您验证流程所需的信息,之后您可以致电updateEmail

【讨论】:

    【解决方案3】:

    2021 年 10 月

    verifyBeforeUpdateEmail 方法绝对可以做到这一点。

    示例(Javascript):

    firebase.auth().currentUser
      .verifyBeforeUpdateEmail('user@example.com')
      .then(function() {
        // Verification email sent. 
        // Clicking the link in email will update the email address.
      })
      .catch(function(error) {
        // Error occurred. Inspect error.code.
      });
    

    ^ 上面的代码就是你所需要的。

    但是,您也可以传递可选的第二个参数actionCodeSettings。当此参数存在时,状态/继续 URL 将设置为电子邮件验证链接中的“continueUrl”参数。

    示例(Javascript):

    const actionCodeSettings = {
      url: 'https://www.example.com/cart?email=user@example.com&cartId=123',
      iOS: {
        bundleId: 'com.example.ios'
      },
      android: {
        packageName: 'com.example.android',
        installApp: true,
        minimumVersion: '12'
      },
      handleCodeInApp: true
    };
    firebase.auth().currentUser.verifyBeforeUpdateEmail(
      'user@example.com', actionCodeSettings)
      .then(function() {
        // Verification email sent.
      })
      .catch(function(error) {
        // Error occurred. Inspect error.code.
      });
    

    Firebase Docs

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 2012-07-14
      • 2017-09-09
      • 2017-12-13
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多