我怎样才能使节点js中的jwt过期?

时间:2014-11-02 14:34:29

标签: node.js authentication token access-token jwt

我正在使用npm中的jsonwebtoken模块,我正在尝试使令牌过期,但它似乎没有过期。这是我的代码:

app.post('/token', function(req, res) {
  name = 'Name'
  var token = jwt2.sign(name, secret, { expiresInMinutes: 5 });
  res.end(token);
});

我稍后会在这里使用此令牌:

app.post('/feed', function(req, res) { 
  console.log('hiiiiii');
  token = req.body.token;

  console.log('access-token :' + token);
  jwt2.verify(token, 'secret', function(err, decoded) {
    if (err) {
      err = {
        name: 'TokenExpiredError',
        message: 'jwt expired',
        expiredAt: 1408621000
      }
      console.log(err.name);
    } else {
      console.log('decoded token:' + decoded);
      res.end(decoded);
    }
  });
});

1 个答案:

答案 0 :(得分:0)

这是一个最小的测试用例,展示了它按预期工作的示例:

'use strict';
var jwt = require('jsonwebtoken');

var token = jwt.sign({ foo: 'bar' }, 'shhhhh', { expiresInMinutes: 1});

console.log(token);

setTimeout(function() {
    jwt.verify(token, 'shhhhh', function(err, decoded) {
        if(err) {
            console.error('err: ', err);
        } else {
            console.log('decoded: ', decoded);
        }
    });
}, 1000 * 62);

运行此测试用例时,我得到以下输出:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE0MTQ5Mzk5MTYsImV4cCI6MTQxNDkzOTk3Nn0.O5zrNrkrhPk_2RekdRwm-nTbHvDIWhsjf_uSWLPfdJQ
  err:  { [TokenExpiredError: jwt expired]
  name: 'TokenExpiredError',
  message: 'jwt expired',
  expiredAt: Sun Nov 02 2014 09:52:56 GMT-0500 (EST) }

您使用变量机密签署令牌,同时使用字符串' secret'进行验证。这可能是问题吗?