我正在尝试通过speakeasy.js在node.js快速服务器上生成密码令牌,该令牌将用作身份验证。密码应每小时更改一次。我使用routers检索令牌并验证它。
如果为了测试目的将time设置为30秒,则令牌不会更改。
代码:
var secret = speakeasy.generateSecret();
var token = speakeasy.totp({
secret: secret.base32,
encoding: 'base32',
step: : 10
});
router.get('/token/:token', function(req, res) {
console.log(token);
var usertoken = req.params.token;
if(usertoken == token){
res.send("Verified")
} else {
res.send("Not Verified")
}
res.json({ token: token, usertoken: usertoken });
});有什么建议吗?
编辑添加的步骤到令牌。
当我请求端点(例如http://localhost:8080/api/token/664006 )时,控制台显示toke (例如290595 )。当我在一定时间后刷新端点时,令牌应该会改变,但不会改变,它仍然是290595。
发布于 2016-10-05 11:09:13
我刚刚检查了文档,它看起来是您要查找的参数的步骤。您应该将时间字段保持为默认值(Date.now()从doc),并播放step字段。
就像这样:
var secret = speakEasy.generateSecret();
var token = speakEasy.totp({
secret : secret.base32,
encoding : 'base32',
// leave time field to default
step : 10
});对于验证,请使用所提供的方法,而不是==:
router.get('/token/:token', function(req, res) {
console.log(token);
var usertoken = req.params.token;
var verified = speakeasy.totp.verify({
secret: base32secret,
encoding: 'base32',
token: userToken
});
//check if the token has changed
console.log(verified);
});

发布于 2017-07-21 19:52:55
对我来说,当我在验证代码中添加“步骤”时,一切都正常了。
var verified = speakeasy.totp.verify({
secret: secret,
encoding: 'base32',
token: token,
step: 10
})https://stackoverflow.com/questions/39872045
复制相似问题