成功,但依然使用failureRedirect – 护照

app.post('/signup', passport.authenticate('local-signup', { successRedirect: '/', failureRedirect: '/signup', failureFlash: true })); 

这是路线。

 passport.use('local-signup', new LocalStrategy({ usernameField: 'email', passwordField: 'password', passReqToCallback: true }, function(req, email, password, done) { process.nextTick(function() { User.findOne({ 'local.email': email }, function(err, user) { if(err) return done(err); if(user) { return done(null, false, req.flash('signupMessage', 'That email is already taken')); } else { var newUser = new User(); newUser.local.email = email; newUser.local.password = newUser.generateHash(password); newUser.save(function(err) { done(err, user); }); } }); }); })); 

这是护照configuration文件。 该表单正在按预期工作,并使用我的mongo模式保存,但它使用failureRedirect而不是successRedirect,任何人都注意到有什么问题?

当你在新创build的用户上调用save函数时,你会忘记将第二个parameter passing给它的callback函数,这是从db返回的用户文档。

从你当前的代码逻辑,你最后完成的函数中的用户是指findOne的callback,因此永远不会到达那里,因为如果有一个用户从服务器回来,那么它将执行if (user) { ... }

确保传递第二个参数来保存,如下所示:

 newUser.save(function(err, user) { done(err, user); });