Speakeasy express js:一次性密码生成未过期

时间:2017-04-19 06:22:13

标签: javascript node.js express one-time-password

以下是我使用speakeasy包的一次性OTP(一分钟后过期)的实现

 var secret = speakeasy.generateSecret({length: 20}).base32;
        var token = speakeasy.totp({
            secret: secret,
            encoding: 'base32',
            time:60
        });
  console.log('OTP',token);

验证令牌

var verified = speakeasy.totp.verify({
            secret: req.params.secret,
            encoding: 'base32',
            token: req.params.token,
            time:60
        });

但OTP永不过期,console.log(verified)总是在到期时间后返回true

1 个答案:

答案 0 :(得分:0)

在您的令牌定义中:

var token = speakeasy.totp({
            secret: secret,
            encoding: 'base32',
            time:60
        });

time选项更改为step选项,然后重试:

var token = speakeasy.totp({
            secret: secret,
            encoding: 'base32',
            step:300  //time in seconds
        });

您可以使用两个选项:timestep

请查看这两个选项,并根据您的情况决定哪一个适合。如果time是您的正确选项,则必须以秒为单位指定纪元时间。 60在这里似乎不是正确的价值。 time的有效值可以是1495176700

提供您希望令牌过期的纪元时间,然后重试。希望它能适应这些变化。