我正在尝试通过node.js express服务器上的speakeasy.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控制台会显示例如290595.当我在一定时间后刷新端点时,令牌应该改变,但事实并非如此。它仍然是290595。
答案 0 :(得分:1)
我刚检查了文档,看起来您正在寻找它的参数。 您应该将时间字段保留为默认值(文档中的Date.now())并使用步骤字段。
这样的事情:
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);
});
答案 1 :(得分:0)
对我来说,当我在验证码中添加'step'时,一切都正常运行。
var verified = speakeasy.totp.verify({
secret: secret,
encoding: 'base32',
token: token,
step: 10
})