您應該看看passport docs中的自定義回調部分,其中介紹瞭如何覆蓋處理認證請求的內置行爲。您可以編寫一個自定義回調函數,用於服務您從策略中調用的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
調用,這將作爲您從本地策略調用完成的功能。
查看在下面的代碼中調用完成的函數,該函數爲您爲護照定義的本地策略。您可以根據來自API調用或數據庫操作的響應,根據策略設置各種可用參數,如err
,user
,info
來調用done函數。這些參數將通過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);
});
}
));
謝謝,作品很棒 – Joseph 2016-03-26 12:20:42