我正在使用JWT-'jsonwebtoken'存储库。

我想创建一个令牌并检查它何时过期,如果它过期了,它应该返回一个错误。由于某种原因,我得到了解码(分辨率)。

要创建我正在使用的令牌:

const jwt = require('jsonwebtoken');

const SECRET_KEY = 'It@y W@$ H3r3';
const options = {
    expiresIn: '5s',
};

const callback = (err, token) => {
    console.log('Token:', token);
    setTimeout(() => {
        jwt.verify(token, SECRET_KEY, (err, res) => {
            console.log('res', res);
            console.log('err', err);
        });
    }, 10000);
};

jwt.sign(options, SECRET_KEY, callback);


由于某种原因,我得到了解码:

{ expiresIn: '5s', iat: 1543574822 }


我应该得到这样的错误:

err = {
    name: 'NotBeforeError',
    message: 'jwt not active',
    date: 2018-10-04T16:10:44.000Z
  }


希望有人解决了这个问题,可以在这里提供帮助...
泰,伊泰

最佳答案

jwt.sign(有效载荷,secretOrPrivateKey,[选项,回调])

如果要在有效负载上传递expiresIn,则应使用exp not expiresIn:

jwt.sign({
  exp: Math.floor(Date.now() / 1000) + (60 * 60),
  data: 'foobar'
}, 'secret');


如果要使用expiresIn,则必须在选项上传递它:

const SECRET_KEY = 'It@y W@$ H3r3';
const options = {
    expiresIn: 5,
};

jwt.sign({}, SECRET_KEY, options, callback);


得到了一个叫尤里的朋友的答案。
谢谢。

10-06 12:01