我正在尝试使用speakeasy https://www.npmjs.com/package/speakeasy在快递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,但它没有帮助
答案 0 :(得分:2)
我不了解speakeasy
,但我们已在项目中成功使用notp
来生成我们与Express一起使用的一次性密码,这可能会有所帮助:{ {3}}
答案 1 :(得分:1)
添加在生成用于验证的令牌时提供的step
值。
var verified = speakeasy.totp.verify({
secret:secret.base32 ,
encoding: 'base32',
token: code,
step: 300
});
答案 2 :(得分:0)
您应该将counter = 123
添加到验证功能:
var verified = speakeasy.totp.verify({
secret: secret.base32,
encoding: 'base32',
token: code,
counter: 123
});
答案 3 :(得分:0)
module.exports = (num = 4) => {
return Math.random().toFixed(num).substr(`-${num}`)
}
OTP:9749