Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?

Posted

技术标签:

【中文标题】Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?【英文标题】:Firebase Auth Password Reset: How to properly send a password reset email including the confirmation code? 【发布时间】:2018-11-02 03:02:39 【问题描述】:

我一直无法让 Firebase 发送密码重置电子邮件,其中包含方法 firebase.auth().verifyPasswordResetCode(code) 所需的确认码。

我正在使用sendPasswordResetEmail(email) 方法,电子邮件中包含一个链接,可让用户创建新密码。

由于我对密码设置了一些限制(它们必须包含一个数字),这将打破限制。

我在文档中找不到有关如何将确认码发送到电子邮件以重置密码的任何内容。

这就是我的使用方式:

public sendResetPasswordEmail(email: string): Promise<any> 

  return this.fireAgent.firebase.auth().sendPasswordResetEmail(email, 
    url: 'http://localhost:8100/',
    handleCodeInApp: true
  );


任何帮助将不胜感激。

【问题讨论】:

我自己也在为此苦苦挣扎。唯一提供的答案不起作用,因为 actionCodeSettings 对象内的“URL”是您在通过 firebase 重置密码后将导航到的 URL。 【参考方案1】:

据我所知,Firebase 身份验证不允许您指定用户可以在重置密码电子邮件提供给您的 url 上插入的密码类型。但是,您应该可以使用验证码认证服务来实现它。

要使用验证码,您需要将对象ActionCodeSetting 添加到您的sendPasswordResetEmail 方法中。它应该是这样的:

var actionCodeSettings = 
  // URL you want to redirect back to. The domain (www.example.com) for this
  // URL must be whitelisted in the Firebase Console.
  url: 'https://www.example.com/finishSignUp?cartId=1234',
  // This must be true.
  handleCodeInApp: true,
  ios: 
    bundleId: 'com.example.ios'
  ,
  android: 
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12'
  
;

在您的情况下,您唯一感兴趣的是handleCodeInApp。通过这种方式,电子邮件将为您提供一个代码,您需要将其手动放在verifyPasswordResetCode 上。

之后,您可以手动将新密码输入您的客户端,而无需使用 Firebase 电子邮件提供商。用verifyPasswordResetCode确认验证码有效后直接拨打confirmPasswordReset("verificationCode", "newPassword")即可。

希望对您有所帮助!

【讨论】:

我尝试在ActionCodeSetting 上使用handleCodeInApp,但电子邮件仍然只显示一个链接,用于处理由 Firebase 创建新密码。它不包含 verifyPasswordResetCode 方法所需的代码。我已经更新了我的问题以包含我正在使用的当前代码。有什么想法吗? 您是否在电子邮件模板中添加了https://yours.firebaseapp.com/__/auth/action?mode=&lt;action&gt;&amp;oobCode=&lt;code&gt; 以添加代码?您可以在模板中显示您需要的任何内容:support.google.com/firebase/answer/7000714?hl=en 模板未经编辑,包含%LINK%,将替换为生成的链接。但是,我仍然没有看到用户可以在我的应用程序中输入的任何验证码进行验证,并且电子邮件内的链接将重定向到 Firebase 提供的新密码页面(我也有iOSandroid在我的ActionCodeSetting 中正确设置)。

以上是关于Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase Auth 密码重置

如何使用 django-rest-auth 和 Mailgun 从 Django 发送密码重置电子邮件

在服务器/管理员上创建帐户后发送 Firebase 重置密码电子邮件

密码重置电子邮件中的 Firebase 传递状态(继续应用链接)

将firebase oobCode解码为服务器端的用户

如何自定义 django rest auth 密码重置电子邮件内容/模板