2017-04-19 9 views
0

がここスピークイージー特急JS:ワンタイムパスワード生成が

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 
     }); 

を確認もぐりパッケージで1時間OTP(1分後に失効)のための私の実装で有効期限が切れていませんが、OTPがあります有効期限切れではありませんconsole.log(verified)は、有効期限が過ぎると常にtrueを返します

答えて

0

トークン定義で:

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

変更timeオプションオプションstepにして、もう一度試してください:

あなたが使用できる2つのオプションがあります
var token = speakeasy.totp({ 
      secret: secret, 
      encoding: 'base32', 
      step:300 //time in seconds 
     }); 

timestep

両方のオプションを確認して、どちらが適切かを判断してください。 timeが適切なオプションである場合、エポック時間を秒単位で指定する必要があります。 60は正しい値ではないようです。 timeの有効な値は1495176700です。

トークンを期限切れにしてからもう一度やり直してください。これらの変更に対応できることを願っています。

+0

ドキュメント時間当たりのドキュメント 'VARトークン= speakeasy.totpから秒spefiedれているように({ 秘密:secret.base32、 エンコーディング 'base32' 時間:秒 で指定1453667708 //}) ; ' – Jabaa

+0

私はこの意味を理解できませんでした。ここでは正しい値ではないようです。時間の有効な値は1495176700です。 – Jabaa

+0

また、epcoh時間を追加できますか? – Jabaa

関連する問題