我正在尝试找到一种解决方案,使我可以在验证JWT的路由上进行中间件检查。由于此验证将对它进行解码以及验证,因此我希望将已解码的数据传递到路由,而不必再次进行解码。请参阅下面的当前解决方案:
//route.js
app.get("/donations", helpers.protected, (req, res) => {
console.log(req.user)
});
//helper.js
module.exports.protected = (req, res, next) => {
const jwt_token = req.cookies["auth"];
jwt.verify(jwt_token, nconf.get("jwt:secret"), (err, decoded) => {
if (err || !decoded) {
logErr(error.INVALID_JWT, err, req);
return res.redirect("/");
} else {
req.user = decoded;
return next();
}
});
};
目标是通过将验证逻辑放在中间函数中,从而使代码在路由中保持简洁明了。我希望能够避免必须解码两次但又要安全。我可以使用req.user =如我上面所示?是否可以修改req.user或将其放置在客户端的HTTP请求中?将使用res.locals.user =已解码;是更好还是更坏使用?
谢谢
答案 0 :(得分:2)
是的,您将decoded
传递到req
但是
仅因为req.user
与会话用户有关,我就避免将解码设置为req.user
。只需使用req.decoded
或其他方式即可。仅在需要将对象全局设置为所使用的呈现引擎时,才需要使用res.locals
。