我已经开发了JWT令牌,并且一切正常。就像生成和验证令牌一样。但是问题是我已经添加了过期时间,但是当我使用旧令牌时,它将我重定向到我的网站。
jwt.sign(user, process.env.privateKey, { expiresIn: '1h' })
谁能告诉我该怎么做?
我已经搜索了一些解决方案,有人说还要清除cookie,如果有人想建议我清除cookie,然后告诉我如何清除cookie。清除的正确方法。
答案 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})
效果很好