JWT令牌不会在Node Js中过期

时间:2020-07-28 10:36:05

标签: node.js express jwt

我已经开发了JWT令牌,并且一切正常。就像生成和验证令牌一样。但是问题是我已经添加了过期时间,但是当我使用旧令牌时,它将我重定向到我的网站。

jwt.sign(user, process.env.privateKey, { expiresIn: '1h' })

谁能告诉我该怎么做?

我已经搜索了一些解决方案,有人说还要清除cookie,如果有人想建议我清除cookie,然后告诉我如何清除cookie。清除的正确方法。

3 个答案:

答案 0 :(得分:0)

您将需要添加中间件来验证JWT。这将检查JWT是否已由您签名,以及(对于该问题而言更重要)是否已过期。

请参阅:https://www.npmjs.com/package/jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback

答案 1 :(得分:0)

在中间件中

const jwt = require('jsonwebtoken');
const HttpResponse = require('../models/http-response');


require('custom-env').env(process.env.NODE_ENV);
const secret_key=process.env.secret_key;

module.exports = (req, res, next) => {
  if (req.method === 'OPTIONS') {
     return next();
     }
  try {
     const token = req.headers.authorization.split(' ')[1]; // Authorization: 'Bearer 
      TOKEN'
      if (!token) {
        throw new Error('Authentication failed!');
        }
      const decodedToken = jwt.verify(token, secret_key);
      req.userData = { userId: decodedToken.userId };
      next(); 
      } catch (err) {
         const error = new HttpResponse('Authentication failed!', 403);
         return res.json({ response: error });
         }
      };

答案 2 :(得分:0)

假设您要覆盖sign参数中的默认算法。在这种情况下,请将expiresIn作为另一个键传递给另一个完全不同的对象。

应该是:

jwt.sign(data,privateKey,{算法:“ RS512”,expiresIn:到期})

但不是:

jwt.sign(数据,私钥,{算法:'RS512'},{expiresIn:expire})

效果很好