8

json Web トークン認証を実装しました。バックエンドで、作成されたトークンをjsonwebtoken次のようにクライアントに送信します。

var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 });
return res.json({ token: token });

クライアント側では、このトークンを SessionStorage に保存するだけです。問題は、トークンが 1 分後に期限切れにならないことです。何か不足していますか?

編集:この投稿に示されているものと同じものを実装しました。

4

3 に答える 3

22

jwt.signたとえばの最初の引数としてオブジェクトを提供しない場合、同じ問題が発生することに気付きましたjwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });

この間違った使用法は、jwt.sign間違っていても機能します。提供された設定を無視するだけです。https://github.com/auth0/node-jsonwebtoken/issues/64

次のように、必ず最初の引数としてオブジェクトを指定してくださいjwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });

更新: マングースなど、非標準の JavaScript オブジェクトの使用に関する問題が報告されています。バージョン 5.5.2 には、これに対する修正があります。詳細はこちら。お知らせありがとう@gugol。直接のデータベース オブジェクトなどではなく、必要なプロパティを持つプレーン オブジェクトを渡すようにしてください。

于 2015-04-21T17:04:05.833 に答える
4

トークンはセッション ストレージから自動的に削除されません。ただし、トークンが有効であることを確認しようとすると、期限切れのトークンは無効になるはずです。

このチュートリアルから、有効性チェックは例外をスローする必要があります。

if (token) {
  try {
    var decoded = jwt.decode(token, app.get('jwtTokenSecret'));

    // handle token here

  } catch (err) {
    return next();
  }
} else {
  next();
}

Verify はjsonwebtokenパッケージにも含まれています。そして、これはドキュメントからのものです:

(コールバックと同期) 署名 (およびオプションで、有効期限、オーディエンス、発行者) が有効な場合、デコードされたペイロードを返します。そうでない場合は、エラーが返されます。

于 2014-05-13T09:24:22.497 に答える