首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Speakeasy.js每小时生成新令牌

Speakeasy.js每小时生成新令牌
EN

Stack Overflow用户
提问于 2016-10-05 10:53:26
回答 2查看 845关注 0票数 2

我正在尝试通过speakeasy.js在node.js快速服务器上生成密码令牌,该令牌将用作身份验证。密码应每小时更改一次。我使用routers检索令牌并验证它。

如果为了测试目的将time设置为30秒,则令牌不会更改。

代码:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 11:09:13

我刚刚检查了文档,它看起来是您要查找的参数的步骤。您应该将时间字段保持为默认值(Date.now()从doc),并播放step字段。

就像这样:

代码语言:javascript
复制
var secret = speakEasy.generateSecret();
var token = speakEasy.totp({
  secret : secret.base32,
  encoding : 'base32',
  // leave time field to default
  step : 10
});

对于验证,请使用所提供的方法,而不是==:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2017-07-21 19:52:55

对我来说,当我在验证代码中添加“步骤”时,一切都正常了。

代码语言:javascript
复制
var verified = speakeasy.totp.verify({
    secret: secret,
    encoding: 'base32',
    token: token,
    step: 10
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39872045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档