我从互联网上下载的一个工作项目......
在代码的一个位置,我有以下内容:
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
身份验证过程中出现问题怎么办?
答案 0 :(得分:0)
undefined
返回。requireAuth
将始终先执行,然后function(req, res){}
执行。但是如果requireAuth
因任何原因失败,将在中间件堆栈中跳过function(req, res){}
。任何错误都应在error middleware中处理。如果你不处理它们,整个应用程序就会崩溃。