node.js - 我可以在 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; 使用更好或更差?
谢谢
解决方案
是的,你通过decoded
了req
但
我会避免将解码设置为req.user
,仅仅是因为req.user
与会话用户有关。只是使用req.decoded
或其他东西。仅res.locals
当您需要将对象全局设置为您正在使用的渲染引擎时才需要使用。
推荐阅读
- python - 为神经机器翻译清理文本数据
- node.js - 2020 年在哪里部署 NodeJS Express + MongoDB 应用程序
- windows - 适用于 Windows ARM64 的 Opengl32.lib
- r - 如何为多个帧从最高到最低排名?
- vba - vba 应用程序定义或对象定义的错误(工作的代码停止工作)
- discord.js - (discord js 反垃圾邮件)如何制作白名单频道命令?
- android-studio - Android Studio 代码折叠限制为 80 个字符 - 设置不起作用 (MacOs Big Sur)
- lua - 如何将打印件与 roblox 中的脚本连接起来?
- apache-spark - 无法捕获 Pyspark UDF 异常
- firebase - Flutter中的求和问题不起作用,如何在导航栏中显示总收入?