Nodejs – Passport身份validation始终返回失败redirect

我正在通过passportJs进行表单login,它总是返回failureRedirect。 我有这个问题在堆栈溢出search,但仍然没有正确的答案。 这是我的代码:

  • 表格制作玉石:

    form(method='post', action='/users/login', enctype='multipart/form-data') .form-group label Username input.form-control(name='username', type='text' placeholder='Enter Username') .form-group label Password input.form-control(name='password', type='password' placeholder='Enter password') input.btn.btn-default(name='submit', type='submit', value='Login') 

路由器Hanlde使用expression式框架formsNodejs和护照中间件:

 passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.getUserById(id, function(err, user) { done(err, user); }); }); passport.use(new LocalStrategy({ usernameField: 'username', passwordField: 'password' }, function(username, password, done) { User.getUserByUsername(username, function(err, user) { if (err) throw err; if (!user) { console.log('Unknown User'); return done(null, false, { message: 'Unknown User' }); } User.comparePassword(password, user.password, function(err, isMatch) { if (err) throw err; if (isMatch) { return done(null, user); } else { console.log('Invalid Password'); return done(null, false, { message: 'Invalid Password' }); } }); }); } )); router.post('/login', passport.authenticate('local', { failureRedirect: '/users/login', failureFlash: 'Invalid username or password' }), function(req, res) { console.log('Authentication Successful'); req.flash('success', 'You are logged in '); res.redirect('/'); }); 

看看你在评论中共享的getUserByUsername函数,看起来你没有以正确的方式调用getUserByUsernamecallback函数,因此没有得到导致失败redirect的user对象。 你分享的function是:

 module.exports.getUserByUsername = function(username, callback){ var query = {username: username}; User.findOne(query, callback); } 

将其更改为以下内容可以解决您的问题:

 module.exports.getUserByUsername = function(username, callback){ var query = {username: username}; User.findOne(query, function(err, user) { callback(err, user); }); }