是否可以在express.js req对象中传递JWT解码的数据?

时间:2018-06-26 19:14:50

标签: node.js express jwt

我正在尝试找到一种解决方案,使我可以在验证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 =已解码;是更好还是更坏使用?

谢谢

1 个答案:

答案 0 :(得分:2)

是的,您将decoded传递到req

但是

仅因为req.user与会话用户有关,我就避免将解码设置为req.user。只需使用req.decoded或其他方式即可。仅在需要将对象全局设置为所使用的呈现引擎时,才需要使用res.locals