2015-10-25 40 views
7

对于Accounts.forgotPassword()Accounts.sendVerificationEmail(),生成令牌。帐号密码电子邮件令牌是否过期?

该令牌是否过期?
如果是这样,过了几段时间?

+0

'verificationToken'有一个创建时间戳,但没有到期时间戳afaict。我知道验证令牌或密码重置令牌只能使用一次。 –

+0

有趣的是,如果我使用了两次令牌(再次点击邮件链接),我得到这个错误消息:“错误:令牌过期[403]”误导性措辞。 – Artfree

+0

迈克尔 - 是否有可能获得对verificationToken创建时间戳的访问?如果是这样,我可以创建我自己的令牌到期例程。谢谢。 – Artfree

回答

1

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

电子邮件重置数据(令牌,电子邮件和令牌创建日期)被保存在用户的记录,因为在the source可以看出:

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

因此,日期是在以下蒙戈选择:

'services.password.reset.when' 

不幸的是,所有的reset数据,只要resetPassword方法被调用正确的标记未设置。

这使得不可用的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' 

你可以,但是,与此信息定期很容易失效老令牌,或推出自己的本地叉子或账户密码包。

+0

'when'因此给出了创建令牌的日期,而不是它将过期的日期。您是否设法在抓取代码时找到有关自动的,可能基于时间的令牌过期的数据? –

+0

没有使令牌过期的代码。例如,您应该推出自己的产品,创建每小时运行一次并删除旧令牌。您可能还需要更改重置密码电子邮件模板以反映该情况。 – MasterAM

+0

当然,您始终可以分支帐户密码或覆盖其方法处理程序并在其中注入此功能。 – MasterAM

相关问题