【发布时间】:2018-12-19 05:54:45
【问题描述】:
我正在使用 Node.js 和 Express 制作 API 服务器。
我还为 auth 用户使用了 JWT 令牌认证。
如果令牌过期,我的场景就在这里。
(Backend) Middleware detect expired(Frontend) Receive token is expired(Fronend) Refresh token request to backend(Backend) Verify token is valid and if it expired, sign new token(with old token's payload) and response it to frontend
在第 4 位,我的代码在这里。
try {
const token = req.headers.authorization.split(' ')[1];
jwt.verify(token, SECRET, (err, decoded) => {
if(err.name === 'TokenExpiredError') {
const payload = jwt.verify(token, SECRET);
const userid = payload.userid;
const is_admin = payload.is_admin;
const refreshToken = jwt.sign({
userid: userid,
is_admin: is_admin
}, SECRET, {
algorithm: 'HS256',
expiresIn: '10m'
})
res.status(200).json({status: true, token: refreshToken});
}
else if(err) {
res.status(401).json({status: false, result: "Invalid token"});
}
})
} catch(e) {
//console.log(e);
res.status(401).json({status: false, result: "Token does not exist"});
}
运行后,抛出const payload = jwt.verify(token, SECRET);的错误行。
因为如果token过期了,会抛出TokenExpiredError错误。
我想解码令牌并提取过期令牌的有效负载。
但是在verify()中,没有关于payload的信息。
于是我阅读了文档,发现了一些兴趣方法decode()。
但它提到不要使用decode(),因为它不检查签名是否正确。
有没有关于提取过期令牌有效载荷的解决方案?
谢谢。
【问题讨论】: