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); });
对我来说,当我在validation码里面添加'step'时,一切都正常了。
var verified = speakeasy.totp.verify({ secret: secret, encoding: 'base32', token: token, step: 10 })