NodeJS 在express js中一次性生成密码

yebdmbv4  于 2023-08-04  发布在  Node.js
关注(0)|答案(4)|浏览(102)

我正在尝试使用speakeasy https://www.npmjs.com/package/speakeasy在express js中生成OTP。
下面是我试过的示例代码

var speakeasy = require('speakeasy');
        var secret = speakeasy.generateSecret({length:32});

        //generate token
        var code = speakeasy.totp({
            secret:secret.base32,
            encoding: 'base32',
            step:300,
            window:100,
            counter:123
        });

        //verify token
        var verified = speakeasy.totp.verify({
            secret:secret.base32 ,
            encoding: 'base32',
            token: code
        });

字符串
验证令牌console.log(verified)时,始终返回false。
我已经关注了这个github链接https://github.com/speakeasyjs/speakeasy/issues/52,但它没有帮助

czq61nw1

czq61nw11#

module.exports = (num = 4) => {
    return Math.random().toFixed(num).substr(`-${num}`)
}

字符串

编辑:.substr已弃用

“.substr”现在[已弃用][1]。我们可以使用这种方法:

module.exports = (num = 4) => {
     Math.random().toFixed(num).substring(0, length);
}


OTP:9749

qojgxg4l

qojgxg4l2#

我不知道speakeasy,但我们已经成功地在我们的项目中使用notp来生成我们在Express中使用的一次性密码,也许这会有所帮助:https://www.npmjs.com/package/notp

8gsdolmq

8gsdolmq3#

添加生成验证令牌时给定的step值。

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

字符串

juud5qan

juud5qan4#

您应该将counter = 123添加到验证功能中:

var verified = speakeasy.totp.verify({
      secret: secret.base32,
      encoding: 'base32',
      token: code, 
      counter: 123
});

字符串

相关问题