知道更好的身份验证与护照/ JWT策略



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

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

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);:没有returndone(err, false);怎么办?

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

  1. 没关系。这两种情况都会导致undefined无论如何都被退回。
  2. 中间件按定义它们的顺序执行。所以requireAuth总是先执行,然后再执行function(req, res){}.但是,如果requireAuth由于某种原因失败,function(req, res){}将在中间件堆栈中被跳过。任何错误都应在错误中间件中处理。如果不处理它们,则整个应用程序将崩溃。

最新更新