授权后护照不会redirect

我遇到了一个问题,当我尝试使用护照login时,页面不redirect。 授权返回true (正确的用户名,密码)。

我很确定它位于我的有效validPasswordfunction的某个地方,但我不确定。

login路线

 app.get('/login', function (req, res) { res.render('login', {}); }); 

login后

 app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' })); 

用户原型

 User.prototype.validPassword = function(username, unhashedPassword) { async.waterfall([ function (callback) { User.find({ "username" : username }, function (err, data) { if(err) return handleError(err); callback(null, data); }); }, function (data, callback) { var isGood = passwordHash.verify(unhashedPassword, data[0].password); callback(null, isGood); } ], function (err, result) { return result; }); }; 

本地策略

 passport.use(new LocalStrategy( function(username, password, done) { var unhashedPassword = password; var passedUsername = username; User.findOne({ username: username }, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(passedUsername, unhashedPassword)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); 

有没有错误打印到我的控制台,所以我现在有点困惑。 isGood是否可能以错误的格式返回? 任何帮助将是伟大的。

我想出了我的问题。 问题出在我的本地策略和我的validPassword原型中。

在我的策略中,我有一个console.log错误,无效的用户名错误,无效的密码 。 我也在我的prototype打印评论passwordHash.verify(unhashedPassword, this.password)有一个console.log

当我login时,控制台会打印如下:

 LOG: valid username (Strategy) LOG: invalid password (Strategy) LOG: true (Prototype) 

遵循逻辑stream程, LOG: true (prototype) 应该出现在LOG: invalid password (Strategy)但是出现之后意味着在某处出现了同步问题。

那么,我通过删除大约15行代码来解决这个问题,现在它像一个漂亮的东西。

这就是我的validation策略现在的样子。

User.prototype.validPassword

 User.prototype.validPassword = function(unhashedPassword) { return passwordHash.verify(unhashedPassword, this.password); }; 

LocalStrategy

 passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, function(username, password, done) { var unhashedPassword = password; var passedUsername = username; process.nextTick(function () { User.findOne({ username: passedUsername }, function(err, user) { console.log('within local strategy', user); if (err) { console.log('Error:', err); return done(err); } if (!user) { console.log('Incorrect username:'); return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(unhashedPassword)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); }); } )); 

POSTlogin

 app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) { res.redirect('/'); });