gpt4 book ai didi

node.js - Express 中间件 Passport 未响应未授权

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:20 25 4
gpt4 key购买 nike

Passport

passport.use('jwt', new JwtStrategy(opts, function(jwt_payload, done) {
User.where({id: jwt_payload.id}).fetch().then(function(user) {
if(user) {
return done(null, user);
} else {
return done(null, false);
}
}).catch(function(err) {
return done(err, false);
});
}));

示例 2
这有效,但是当未设置 JWT 时,当我认为我应该得到 401 响应时,我得到 res = null

app.get('/user', getProfile);
getProfile = function(req, res, next) {
passport.authenticate('jwt', {session: false}, function(err, user, info) {
if(user) {
res.json(user);
} else {
res.json(err);
}
})(res, req, next);
};

示例 2
当未设置 JWT 时,我会得到正确的 401 响应,但如果已设置,我将无法返回 user,因为 res 没有不存在。

app.get('/user', passport.authenticate('jwt', {session: false}, getProfile);
getProfile = function(err, user) {
if(user) {
res.json(user);
} else {
res.json(err);
}
};

那么如何将 res 传递给这个函数呢?

最佳答案

示例 1

在您的第一个示例中,看起来您只是在函数调用中混淆了 reqres 的顺序。应该是

})(req, res, next);

不是

})(res, req, next);

例子2

在您的第二个示例中,我认为您错误地使用了 passport.authenticate 的回调。

passport.authenticate 方法只是在您的实际路由被命中之前调用的中间件。它的回调不会取代您定义的用于处理发送响应的常规路由回调函数 - 您仍然需要在中间件之后提供路由回调。

app.get('/user',
passport.authenticate('jwt', { session: false }),
function(req, res, next) {
res.json(req.user);
});

如果用户未通过身份验证,authenticate 方法应该使用适当的状态代码进行响应,因此您可以安全地在路由回调中调用 req.user 并了解用户已通过身份验证。

关于node.js - Express 中间件 Passport 未响应未授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com