当令牌过期时,jwt.verify也返回res

时间:2018-11-30 11:04:40

标签: javascript jwt

我正在使用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
  }

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

1 个答案:

答案 0 :(得分:1)

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

如果要在有效负载上传递expiresIn,则应使用 exp 而不是 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);

从一个叫Yury的朋友那里得到了答案。 谢谢。