如何使节点 js 中的 jwt 过期?

Posted

技术标签:

【中文标题】如何使节点 js 中的 jwt 过期?【英文标题】:How can i expire a jwt in node js? 【发布时间】:2014-12-29 07:06:35 【问题描述】:

我在 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】:

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

'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' 验证令牌时使用变量 secret 对令牌进行签名。会不会是这个问题?

【讨论】:

如何查看是否过期??如果令牌尚未过期,我想发送响应。

以上是关于如何使节点 js 中的 jwt 过期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 jwt-simple 中的令牌过期?

如果生成了新的 JWT,如何使 JWT 过期

如何手动使 JWT 令牌过期?

其中 jsonwebtoken 存储在服务器 nodejs 中。用户注销后如何使 JWT 过期

jwt令牌过期后如何注销

当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期