通过Passport / JwtStrategy了解更好的身份验证

时间:2018-04-26 17:16:19

标签: javascript node.js express passport.js passport-local

我从互联网上下载的一个工作项目......

在代码的一个位置,我有以下内容:

passport.use(new JwtStrategy({
        secretOrKey: credentials.secret,
        jwtFromRequest: ExtractJwt.fromAuthHeader(),
    },
    function(payload, done) {
        User.findById(
            payload._id,
            function(err, user) {
                if (err) {
                    return done(err, false);
                }
                if (user) {
                    return done(null, user);
                } else {
                    return done(null, false);
                }
            }
        );
    }
));

在代码的其他位置,我有以下内容:

var requireAuth = passport.authenticate('jwt', { session: false });
//...
module.exports = function(app) {
    //...
    authRoutes.get('/protected', requireAuth, function(req, res) {
        res.send({ content: 'Success' });
    });
    //...
}

我在这里有两个问题:

1 - 如果改为:return done(err, false);我们这样做:done(err, false);没有return

2 - 无论函数内部发生了什么,authRoutes.get(*, *, *)的调用中的第3个参数(中间件函数)总是到达:function(payload, done){}(第二个参数) on:new JwtStrategy(*, *)?请注意,中间件函数(第3个参数)返回Success响应。如果JWT身份验证过程中出现问题怎么办?

1 个答案:

答案 0 :(得分:0)

  1. 没关系。无论如何这两种情况都会导致undefined返回。
  2. 中间件按照定义的顺序执行。因此,requireAuth将始终先执行,然后function(req, res){}执行。但是如果requireAuth因任何原因失败,将在中间件堆栈中跳过function(req, res){}。任何错误都应在error middleware中处理。如果你不处理它们,整个应用程序就会崩溃。