此身份验证正常工作
app.post('/login', passport.authenticate('local-login', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true
})
);
但是我正在尝试使用express-validator验证表单的字段。
我是这样的
app.post('/login', function(req, res){
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('password', 'Password is required').notEmpty();
var validationErr = req.validationErrors();
if (validationErr){
res.render('login', {
errors: validationErr,
failureFlash: true
});
} else {
// authenticate once fields have been validated
passport.authenticate('local-login', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
})
}
});
使用第二个代码,当我提交表单并且客户端给出错误消息 localhost没发送任何数据 后,什么也没发生。第一部分工作正常,当我提交一个空表格并达到authenticate方法时,我可以看到所有错误。我怀疑这个question可能会部分回答我的问题,或者与我有某种联系,但我听不懂。
passport.js documentation提供了一个带有函数的示例,但是仅当身份验证成功后才调用该函数。我想在身份验证之前执行字段验证。
让我知道您是否需要护照。验证码。
答案 0 :(得分:0)
passport.authenticate
是一个函数。在您的第一个(工作)代码中,您将其称为中间件,在中间件中,它获取(req,res,next)的对象作为参数传递。
使用第二个代码,您试图不带参数地直接调用它,并且客户端正在超时,因为它没有得到响应。
如果我没有丢失任何东西,您可以通过传递(要求,要求)来完成这项工作,如下所示:
if (validationErr){
res.render('login', {
errors: validationErr,
failureFlash: true
});
} else {
// authenticate once fields have been validated
passport.authenticate('local-login', {
successRedirect: '/home',
failureRedirect: '/login',
failureFlash: true // allow flash messages
})(req, res, next);
}
答案 1 :(得分:0)
在尝试引入express-validator时,我有完全相同的代码和问题。
我可以确认是否添加了额外的“(req,res,next);”至password.authenticate函数的末尾确实允许身份验证过程完成和/ login处理。
但是,仅凭护照使用此方法进行身份验证后,似乎没有其他用户添加到数据库中。我认为需要对护照进行自定义回调,例如:
http://www.passportjs.org/docs/authenticate/
使用示例:https://gist.github.com/Xeoncross/bae6f2c5be40bf0c6993089d4de2175e