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