2017-08-01 61 views
0

我使用Passportpassport-jwt策略,通過JavaScript Work Token驗證用戶身份。我需要能夠根據一些元數據授權用戶,所以我設置了一個自定義回調函數,並將其附加到路由中。JWT無效時無法填充中間件錯誤

router.get('/', auth.loginRequired, function (req, res) {... 

但我在調用該函數時出現問題。我已經大規模簡化IT和策略如下圖所示:

module.exports = { 
    loginRequired: function (req, res, next) { 
    passport.authenticate('jwt', {session: false}, function(err, user, info) { 
     if (!err) { 
     next() 
     } else { 
     res.status(401).send 
     } 
    })(req, res, next) 
    } 
} 

下面的策略如圖:

passport.use(new JwtStrategy(opts, function(payload, done) { 
    var user = {firstName: 'Geraint', email: '[email protected]'} 
    if (payload) { 
    done(null, user) 
    } else { 
    done('Error', null) 
    } 
})) 

當JWT是有效的,與null和預期passport.authenticate回調被稱爲用戶正確傳入。如果JWT無效,則錯誤將作爲信息傳遞給身份驗證回調。 err爲空,user爲假。

如果出現錯誤,爲什麼參數混亂?

回答

0

我也與此工作,我得到了相同的輸出。護照js只能以這種方式工作。

你可以改變條件,也將努力

module.exports = { 
    loginRequired: function (req, res, next) { 
    passport.authenticate('jwt', {session: false}, function(err, user, info) { 
     if (user) { 
     next() 
     } else { 
     res.status(401).send 
     } 
    })(req, res, next) 
    } 
} 

在當前的用戶對象的情況下,它會返回成功,否則將返回錯誤。

0

我的智威湯遜認證做的是:

router.get('/', passport.authenticate('jwt', {session: false}), function (req, res) {... 

如果JWT是無效的,那麼它返回一個401。如果它是有效的,那麼它繼續爲我的路線。