Javascript Passport.js自定义回调传递参数

Javascript Passport.js自定义回调传递参数,javascript,express,passport.js,Javascript,Express,Passport.js,到目前为止我有这个代码 app.post('/login', passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }), function(req, res) { return res.redirect('/profile/' + req.user.username); }); 成功登录正在工作。但是,当登录失败时,它会通过G

到目前为止我有这个代码

app.post('/login', passport.authenticate('local', {
        failureRedirect: '/login',
        failureFlash: true
    }), function(req, res) {
        return res.redirect('/profile/' + req.user.username);
    });
成功登录正在工作。但是,当登录失败时,它会通过
GET
请求重定向到
/login
。所以我需要一些像这样的附加代码来处理这种情况:

app.get('/login', ...);
我需要以这样的方式实现这一点:如果
POST
失败并重定向到此
GET
它将发送导致失败的用户名。这样我就可以将用户名重新填充到表单中,这样就不会在每次有人因为用户名不正确而尝试登录失败时清除该用户名

我怎样才能做到这一点

编辑:这就是我写策略的方式


passport.use(User.createStrategy())


User.js



您可以调用
passport。使用
(req,res,next)
对自己进行身份验证。它接受回调函数作为输入,因此您可以确定该过程是否成功

app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err || !user) {
      // failed
    } else {
      // successful
    }
  })(req, res, next);
});

您可能需要处理
错误
!用户
用户===false
)分别
err
表示过程中存在一些内部错误,但当用户不存在时,用户将
false
。这取决于你是如何编写策略的。

@Amir请查看我的编辑,了解我是如何编写策略的strategy@Ogen您是否也有
passport.use(新的LocalStrategy(User.authenticate())某处?如果其他设置正确,我的答案中的代码应该可以工作。您可以通过向用户和
显示
内部错误
消息来处理
错误
情况!例如,用户名/密码错误的用户
。还有
console.log
err
(如果存在)以查看原因。
app.post('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err || !user) {
      // failed
    } else {
      // successful
    }
  })(req, res, next);
});