[英]Session object storing JWT + handling refresh tokens in node.js backend
我正在使用 Angular 和 node.js (express) 构建我的应用程序,并且我正在使用 JWT 进行身份验证和授权。 Currently, I am storing JWT in session object on server in memory (req.session.jwt = user.generateToken())
and also, I am sending refresh token in HttpOnly cookie to the client.
当 JWT 过期时,我希望服务器给我新的 JWT,如果来自 cookie 的刷新令牌等于数据库中的刷新令牌 - 与用户关联。
我试图在 catch 块中的身份验证中间件中实现刷新令牌逻辑,但它不起作用。
(如果令牌验证失败,则将 cookie 中的 RF 令牌与数据库中的 RF 进行比较,如果为真,则设置新的 JWT 并运行路由处理程序。)
module.exports = function(req, res, next) {
const token = req.session.jwt;
if (!token) return res.status(401).send("Access denied.");
try {
const decoded = jwt.verify(token, config.get("jwtPrivateKey"));
req.user = decoded;
next();
} catch (ex) {
(async () => {
let user = await User.findOne({ username: req.session.username });
if (!user) return res.status(500).send("Invalid session");
if (user.refreshToken === req.signedCookies.refreshToken) {
req.session.jwt = user.generateToken();
next();
} else {
return res.status(401).send("Invalid session");
}
})();
}
};
当我在客户端的本地存储中存储令牌和刷新令牌时,我已经实现了这个刷新令牌逻辑,但这不是很好的实现,所以我试着让它像这样。 我在项目的 Angular 部分中有 token.interceptor - 来自本教程( https://angular-academy.com/angular-jwt/#refresh-token )
这是我的后端https 的 github 回购://github.com/TenPetr/dashboard_backend
如果您有任何想法,如何实现此逻辑,请告诉我。
感谢您的建议。
当您生成新的 JWT 令牌时,由于请求将继续到下一个中间件步骤,您可能需要设置用户,就像您在 jwt 正确时所做的一样。 像这样的东西,试试看,如果有帮助,请告诉我:
if (user.refreshToken === req.signedCookies.refreshToken) {
req.session.jwt = user.generateToken();
const decoded = jwt.verify(req.session.jwt, config.get("jwtPrivateKey"));
req.user = decoded;
next();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.