您应该查看护照文档中的自定义回调部分,该部分解释了如何覆盖处理身份验证请求的内置行为。您可以编写一个自定义回调,该回调将用作您从策略中调用的函数。done
app.get('/login', function(req, res, next) {
/* look at the 2nd parameter to the below call */
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
查看passport.authenticate
调用的第二个参数,它将作为done
您从本地策略调用的函数。
请参阅done
下面代码中调用的函数,这是您为护照定义的本地策略。您可以根据 API 调用或 db 操作的响应从策略中设置done
各种可用参数(如err
、user
、 )来调用该函数。info
这些参数将在passport.authenticate
调用中由上述函数定义处理。
passport.use(new LocalStrategy(
function(username, password, done) {
/* see done being invoked with different paramters
according to different situations */
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));