Speakeasy.js每小时生成一个新的令牌

我试图通过一个node.js express服务器上的speakeasy.js生成一个密码令牌,它将被用作authentication。 密码应该每隔一小时更换一次。 我正在使用routers来检索令牌并进行validation。

如果已将time设置为30秒以进行testing,但令牌永远不会更改。

码:

 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 }); }); 

有什么build议么?

编辑添加到令牌的步骤。

当我请求终点,例如http:// localhost:8080 / api / token / 664006时 ,控制台显示toke,例如290595.当我在一段时间后刷新端点时,令牌应该改变,但是不改变。 还是290595

我刚刚检查了文档,看起来你正在寻找它的参数是一步。 您应该将时间字段保留为默认值(文档中的Date.now())并使用步骤字段进行播放。

像这样的东西:

 var secret = speakEasy.generateSecret(); var token = speakEasy.totp({ secret : secret.base32, encoding : 'base32', // leave time field to default step : 10 }); 

并为validation使用提供的方法,而不是==:

 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); }); 

在这里输入图像说明

https://github.com/speakeasyjs/speakeasy

对我来说,当我在validation码里面添加'step'时,一切都正常了。

 var verified = speakeasy.totp.verify({ secret: secret, encoding: 'base32', token: token, step: 10 })