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

时间:2016-10-05 10:53:26

标签: javascript node.js

我正在尝试通过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。

2 个答案:

答案 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);  

});

enter image description here

https://github.com/speakeasyjs/speakeasy

答案 1 :(得分:0)

对我来说,当我在验证码中添加'step'时,一切都正常运行。

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