下面是我使用speakeasy包实现一次性动态口令(一分钟后过期)
var secret = speakeasy.generateSecret({length: 20}).base32;
var token = speakeasy.totp({
secret: secret,
encoding: 'base32',
time:60
});
console.log('OTP',token);验证令牌
var verified = speakeasy.totp.verify({
secret: req.params.secret,
encoding: 'base32',
token: req.params.token,
time:60
});但是动态口令永远不会过期,在过期时间过后,console.log(verified)总是返回true
发布于 2017-04-19 14:55:45
在令牌定义中:
var token = speakeasy.totp({
secret: secret,
encoding: 'base32',
time:60
});将time选项更改为step选项,然后重试:
var token = speakeasy.totp({
secret: secret,
encoding: 'base32',
step:300 //time in seconds
});请检查这两个选项,并决定哪一个适合您的情况。如果time是正确的选项,那么您必须以秒为单位指定纪元时间。60在这里似乎不是一个正确的值。time的有效值可以是1495176700。
给出您希望令牌过期的纪元时间,然后重试。希望它能与这些变化一起工作。
https://stackoverflow.com/questions/43487918
复制相似问题