【发布时间】:2018-12-05 14:15:47
【问题描述】:
我正在尝试找到一种解决方案,让我可以对验证 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;使用起来更好或更差?
谢谢
【问题讨论】:
-
您考虑过使用 Passport 吗?您可以使用jwt strategy。
-
是的,我以前用过护照,其实我不是很喜欢它。对我来说,做太多工作的库很难定制和调试。与在 ruby 中使用 Rails 类似,它是一个很棒的框架,但是当您需要一些自定义用例或工作流程时,就很难按照自己的意愿去做,因为它太固执了
-
我可能会说 Passport 具有您需要的典型身份验证场景的所有可用钩子......但除此之外,JS 通常非常灵活,因此通常永远不会扩展库或框架以适应的问题:)