簡體   English   中英

Express中間件Passport沒有未經授權的響應

[英]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傳遞給這個函數呢?

例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並知道用戶已通過身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM