Javascript 如果字段为空,Passport.js不调用LocalStrategy

Javascript 如果字段为空,Passport.js不调用LocalStrategy,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我遇到一个问题,如果我尝试在没有用户名或密码的情况下登录,则根本不会调用我的passport.use函数 下面是我的特快专递路线,运行passport.authenticate app.post('/login', passport.authenticate('local-login', { failureRedirect: '/login', // redirect back to the login page if there is an error fail

我遇到一个问题,如果我尝试在没有用户名或密码的情况下登录,则根本不会调用我的
passport.use
函数

下面是我的特快专递路线,运行
passport.authenticate

app.post('/login', passport.authenticate('local-login', {
        failureRedirect: '/login', // redirect back to the login page if there is an error
        failureFlash: true // allow flash messages
    })
下面是我的
护照。只要有
/login
的post请求,请使用该护照上的

passport.use('local-login', new LocalStrategy({
        // by default, local strategy uses username and password, we will override with email
        usernameField: 'email',
        passwordField: 'password',
        passReqToCallback: true // allows us to pass back the entire request to the callback
    },
    function(req, email, password, done) { // callback with email and password from our form
        // find a user whose email is the same as the forms email
        // we are checking to see if the user trying to login already exists
        console.log("GOT HERE");
如果
电子邮件
密码
具有某种类型的值,则此功能可以正常工作。但我希望调用此函数,即使
电子邮件
密码
没有值,这样我就可以进行自定义错误处理


如何实现这一点?

您可以在调用身份验证策略之前添加中间件。大概是这样的:

app.post('/login', function(req, res, next) {
    // do custom error handling
  }, passport.authenticate('local-login', {
        failureRedirect: '/login', // redirect back to the login page if there is an error
        failureFlash: true // allow flash messages
})

在这个中间件中,您可以执行一些自定义错误处理

您可以在调用验证策略之前添加中间件。大概是这样的:

app.post('/login', function(req, res, next) {
    // do custom error handling
  }, passport.authenticate('local-login', {
        failureRedirect: '/login', // redirect back to the login page if there is an error
        failureFlash: true // allow flash messages
})

在这个中间件中,您可以进行一些自定义错误处理

这真的是最好的方法吗?目前我所有的错误处理都在passport函数中。所以将其分离似乎不直观。您可以从这里的源代码中找到:
authenticate
函数要做的第一件事是检查是否有passowrd和username字段。所以我想说这是最简单的方法。@CharlieFish这就是
passport local
的工作原理。如果你想要定制行为,你可以使用这样的策略。谢谢@robertklep和@Ivanvasiljevic这真的是最好的方法吗?目前我所有的错误处理都在passport函数中。所以将其分离似乎不直观。您可以从这里的源代码中找到:
authenticate
函数要做的第一件事是检查是否有passowrd和username字段。所以我想说这是最简单的方法。@CharlieFish这就是
passport local
的工作原理。如果你想要定制行为,你可以使用这样的策略。谢谢@robertklep和@IvanVasiljevic