2017-08-01 36 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。如果它是有效的,那么它继续为我的路线。