[英]Express middleware Passport not responding unauthorized
護照
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傳遞給這個函數呢?
在您的第一個示例中,您似乎只是在函數調用中混合了req
和res
的順序。 它應該是
})(req, res, next);
不
})(res, req, next);
在您的第二個示例中,我認為您正在使用passport.authenticate
回調錯誤。
passport.authenticate
方法只是在實際路由被命中之前調用的中間件。 它的回調不會取代您為處理發送響應而定義的常規路由回調函數 - 您仍需要在中間件之后提供路由回調。
app.get('/user',
passport.authenticate('jwt', { session: false }),
function(req, res, next) {
res.json(req.user);
});
如果用戶未經過身份驗證, authenticate
方法應該使用適當的狀態代碼來處理響應,因此您可以安全地在路由回調中調用req.user
並知道用戶已通過身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.