Node.js Passportjs自定义回调-';密码不正确';消息

Node.js Passportjs自定义回调-';密码不正确';消息,node.js,passport.js,Node.js,Passport.js,对于常规身份验证,“密码不正确”消息可通过failureFlash获得 app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true }) ); passport.use(ne

对于常规身份验证,“密码不正确”消息可通过failureFlash获得

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

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));
但是如果我使用自定义回调,我如何访问“错误密码”消息并将其显示给用户?因为自定义回调似乎只检查(!user)。我需要自定义回调,因为我正在通过ajax登录,我不能重定向

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.status(401).send({"ok": false}); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return return res.send({"ok": true});
    });
  })(req, res, next);
});

消息位于自定义回调处理程序中的
info
参数中,使其非常容易访问并发送给用户


另一方面,我不会指定用户名或密码是导致登录失败的原因。使用这种响应很容易测试存在哪些用户名,然后只需关注密码。

failureFlash
的功能实际上是由模块提供的,因此如果您计划手动实现,您可以使用它再次感谢您的响应。我尝试在自定义回调处理程序中检查
info
的值,但它是
未定义的
。另外,我也同意你的另一个观点,就是用户名或密码没有那么具体(我是受hotmail.com启发的,它仍然是具体的)@KayaToast这很奇怪,它应该在那里。甚至做了一个小的测试应用程序,它只将从authenticate返回的消息返回给调用者,消息当然就在那里。您的示例解决了这个问题。我一定是做错了什么事(我会检查一下,但我想可能与我的具体问题无关)。谢谢