Javascript 帐户密码电子邮件令牌是否过期?

Javascript 帐户密码电子邮件令牌是否过期?,javascript,meteor,meteor-accounts,Javascript,Meteor,Meteor Accounts,对于Accounts.forgotPassword()和Accounts.sendVerificationEmail(),将生成一个令牌 该代币是否过期? 如果是,在什么时间段之后?目前没有与令牌过期相关的内置代码,既没有设置过期时间,也没有强制执行过期时间 电子邮件重置数据(令牌、电子邮件和令牌创建日期)保存在用户记录中,如图所示: var令牌记录={ 令牌:令牌, 电邮:电邮,, 什么时候 }; Meteor.users.update(userId,{$set:{ “服务.密码.重置”:令牌

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

该代币是否过期?

如果是,在什么时间段之后?

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

电子邮件重置数据(令牌、电子邮件和令牌创建日期)保存在用户记录中,如图所示:

var令牌记录={
令牌:令牌,
电邮:电邮,,
什么时候
};
Meteor.users.update(userId,{$set:{
“服务.密码.重置”:令牌记录
}});
因此,日期在以下mongo选择器中:

'services.password.reset.when'
不幸的是,只要使用正确的令牌调用
resetPassword
方法,所有
reset
数据都将被取消设置

这使得它不可用于
validateLogInTest
回调:

Accounts.validateLogInTest(函数(选项)){
if(options.methodName=='resetPassword'&&options.allowed===true){
console.log('resetPassword',options.user.services.password.reset);//未定义
}
返回true;
});
类似地,电子邮件验证令牌存储在
user.services.email.verificationTokens
中,它(如果设置)是令牌记录的数组

因此,日期是在

'services.email.verificationTokens.when'

但是,您可以使用此信息非常轻松地周期性地使旧令牌无效,或者滚动您自己的本地fork或wrap of accounts password。

在当前版本的Meteor(1.9)中,令牌确实会过期,正如您在代码中看到的那样(我猜这种情况已经持续了很长时间)

,何时

这两个参数可通过以下方式配置:

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

verificationToken
有创建时间戳,但没有到期时间戳afaict。我知道验证令牌或密码重置令牌只能使用一次。有趣的是,如果我使用该令牌两次(再次单击电子邮件链接),我会收到错误消息:“错误:令牌已过期[403]”误导性措辞。Michael-是否可以访问verificationToken创建时间戳?如果是这样,我可以创建自己的令牌过期例程。Thx.它位于用户对象中:
services.email.verificationTokens.when
when
因此给出了令牌的创建日期,而不是它将过期的日期。在对代码进行爬网时,您是否找到了有关自动(可能是基于时间的)令牌过期的任何数据?没有使令牌过期的代码。例如,您应该自己滚动,创建每小时运行一次的东西并移除旧令牌。您可能还想更改重置密码电子邮件模板以反映这一点。当然,您可以随时更改帐户密码或重写其方法处理程序,并在@PaulStenne Afaiu
中插入此功能,从而给出令牌的创建日期,不是到期日期
到期日期由
dateNow-token计算。如果请求密码重置并生成新的令牌,Meteor应立即使现有令牌到期。是否存在您不希望发生这种情况的用例?目前,这是一个安全漏洞。我不确定Meteor在密码更改后发布新令牌时如何处理现有令牌。我想他们被删除了,但我还没有检查。如果你已经确认了你声称你应该在meteor/meteor github repo上发行的内容。这不是问题的重点,也不是我的答案。