首页 > 解决方案 > 我可以在 express.js req 对象中传递 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 = decoded; 正如我上面所示?req.user 是否可以被修改或放置在来自客户端的 HTTP 请求中?将使用 res.locals.user = decoded; 使用更好或更差?

谢谢

标签: node.jsexpressjwt

解决方案


是的,你通过decodedreq

我会避免将解码设置为req.user,仅仅是因为req.user与会话用户有关。只是使用req.decoded或其他东西。仅res.locals当您需要将对象全局设置为您正在使用的渲染引擎时才需要使用。


推荐阅读