【问题标题】:Meteor: Programmatically generate password reset token?Meteor:以编程方式生成密码重置令牌?
【发布时间】:2017-06-05 18:53:18
【问题描述】:

在 Meteor 中,您如何以编程方式为用户生成/存储重置密码令牌(在用户自己在 UI 中请求的上下文之外)?

我正在发送一封自定义电子邮件,并希望在其中嵌入我自己的“重置密码”按钮。这需要我自己生成一个有效的重置密码令牌。

是否有任何我不知道的未记录的帐户功能/助手可以帮助我实现这一目标?谢谢!

【问题讨论】:

    标签: meteor


    【解决方案1】:

    对于大多数情况,我建议使用内置的Accounts.sendResetPasswordEmail 发送电子邮件并覆盖Accounts.emailTemplates.resetPassword 对电子邮件进行自定义。例如,您可以像这样执行自定义重置链接:

    Accounts.emailTemplates.resetPassword.html = (user, url) =>
      `<a href="${url}" style="{ something cool... }">Reset your password</a>`;
    

    但是,如果您需要比这更多的可定制性,则没有用于创建重置令牌的现成函数,但是如果您查看source code for Accounts.sendResetPasswordEmail,您会发现实际上您只需要在@ 中插入一个对象987654329@用户对象的字段如下:

    var token = Random.secret();
    var when = new Date();
    var tokenRecord = {
      token: token,
      email: email,
      when: when,
      reason: 'reset'
    };
    Meteor.users.update(userId, {$set: {
      "services.password.reset": tokenRecord
    }});
    
    var resetPasswordUrl = Accounts.urls.resetPassword(token);
    

    现在你可以用任何你喜欢的方式向你的用户发送resetPasswordUrl,它应该可以工作了。但请注意安全性 - 我认为缺少生成密码重置令牌的现成函数是故意的,旨在阻止人们粗心地创建密码重置方法。

    【讨论】:

    • 感谢您非常详细的回答!
    • 很高兴它有帮助。另请注意,有一个 pull request open for Meteor 应该改进此功能,所以这里的事情可能会在未来的 Meteor 版本中发生变化。
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 2012-09-16
    • 2014-05-19
    • 2015-06-25
    • 2018-09-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多