【问题标题】:Do accounts-password email tokens ever expire?帐户密码电子邮件令牌是否会过期?
【发布时间】:2016-01-24 21:21:30
【问题描述】:

对于Accounts.forgotPassword()Accounts.sendVerificationEmail(),会生成一个令牌。

该令牌会过期吗?
如果有,在多长时间后?

【问题讨论】:

  • A verificationToken 有一个创建时间戳,但没有过期时间戳。我知道验证令牌或密码重置令牌只能使用一次。
  • 有趣 - 如果我使用令牌两次(再次单击电子邮件链接)我会收到此错误消息:“错误:令牌已过期 [403]”误导性措辞。
  • Michael - 是否可以访问 verifyToken 创建时间戳?如果是这样,我可以创建自己的令牌过期例程。谢谢。
  • 在用户对象中:services.email.verificationTokens.when

标签: javascript meteor meteor-accounts


【解决方案1】:

目前没有与令牌过期相关的内置代码,既没有设置过期时间也没有强制执行。

邮件重置数据(token、email和token创建日期)保存在用户的记录中,可以在the source看到:

var tokenRecord = {
  token: token,
  email: email,
  when: when
};
Meteor.users.update(userId, {$set: {
  "services.password.reset": tokenRecord
}});

因此,日期在以下 mongo 选择器中:

'services.password.reset.when'

不幸的是,一旦使用正确的令牌调用 resetPassword 方法,所有 reset 数据都将被取消设置。

这使得 validateLoginAttempt 回调不可用:

Accounts.validateLoginAttempt(function(options) {
  if (options.methodName === 'resetPassword' && options.allowed === true) {
    console.log('resetPassword', options.user.services.password.reset); //undefined
  }
  return true;
});

同样,电子邮件验证令牌存储在user.services.email.verificationTokens,它(如果设置)是令牌记录数组。

因此,日期在

'services.email.verificationTokens.when'

但是,您可以使用此信息很容易地定期使旧令牌失效,或者滚动您自己的本地分叉或帐户密码包装。

【讨论】:

  • when 因此给出了创建令牌的日期,而不是令牌到期的日期。在爬取代码时,您是否设法找到任何有关自动、可能基于时间的令牌过期的数据?
  • 没有使令牌过期的代码。例如,您应该自己动手创建一个每小时运行一次并删除旧令牌的东西。您可能还想更改重置密码电子邮件模板以反映这一点。
  • 当然,您可以随时 fork accounts-password 或覆盖其方法处理程序并注入此功能。
  • @PaulStenne Afaiu when thus gives the date at which the token was created, not the one at which it will expire 到期确实由dateNow - token.when <= tokenLiveTime 计算。我正面临类似@MasterAM 的问题,因为我想创建具有不同到期日期的令牌。如果有关于这个主题的任何信息,我很乐意接受建议。但是 afaik MasterAM 指出了仅有的两个解决方案。
【解决方案2】:

在当前版本的 Meteor (1.9) 中,令牌确实会过期,您可以在代码中看到 here(我猜这种情况已经存在很长时间了)。

Reset password tokens expire after 3 days,当enroll tokens expire after 30 days

这两个参数可以使用:

Accounts.config({
    passwordResetTokenExpirationInDays : 10,
    passwordEnrollTokenExpirationInDays : 60,
})

【讨论】:

  • 如果请求重置密码并生成新令牌,Meteor 应立即使现有令牌过期。是否有一些您不希望这种情况发生的用例?目前,这是一个安全漏洞。
  • 我不确定在更改密码后发布新令牌时 Meteor 如何处理现有令牌。我猜它们已被删除,但我还没有检查。如果您已确认您声称应该在流星/流星 github 存储库上打开一个问题。这不是问题的重点,也不是我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
相关资源
最近更新 更多