Meteor:如何编程生成密码重置令牌?

3
在Meteor中,如何以编程方式为用户生成/存储重置密码令牌(在用户没有在UI中自己请求时)?
我正在发送一封自定义电子邮件,并希望在其中嵌入我的自己的“重置密码”按钮。这要求我自己生成一个有效的重置密码令牌。
是否有一些我不知道的未记录的账户函数/助手可以帮助我实现这一点?谢谢!
1个回答

3
对于大多数情况,我建议使用内置的 Accounts.sendResetPasswordEmail 来发送邮件,并覆盖 Accounts.emailTemplates.resetPassword 做邮件的定制。例如,您可以像这样做一个自定义的重置链接:
Accounts.emailTemplates.resetPassword.html = (user, url) =>
  `<a href="${url}" style="{ something cool... }">Reset your password</a>`;

然而,如果您需要比这更多的自定义功能,则没有准备好的函数来创建重置令牌,但是如果您查看“Accounts.sendResetPasswordEmail”源代码,您会发现您只需要在用户对象的services.password.reset字段中插入一个对象,如下所示:
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,它应该可以工作。但需要注意安全性——我认为缺少生成密码重置令牌的现成函数是有意为之,旨在防止人们轻率地创建密码重置方法。


非常感谢您提供如此详细的答案! - Jon Cursi
很高兴能够帮到你。还要注意,Meteor有一个拉取请求,应该会改善这个功能,所以未来的Meteor版本可能会有所改变。 - Waiski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接