电子邮件或密码为空时,不会调用Passport本地策略

时间:2014-08-09 12:15:46

标签: node.js authentication express passport.js passport-local

我使用以下passportjs LocalStrategy:

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
},
  function(username, password, done) {
  // ...
  }
));

如果我在POST请求中提供电子邮件和密码属性,则一切正常。但如果其中一个是空的,则此中间件不会被执行但重定向发生。

我需要知道发生了什么,并将req.flash传递给客户端来处理此异常。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

您可以使用express-validator。它可以检查您的电子邮件/密码字段,一般它们不是空的。

只需要在app.js入口点中使用并使用它:

var expressValidator = require('express-validator');
app.use(bodyParser());
app.use(expressValidator()); // then let the app use it, place it HERE after the bodyParser()

并在您的登录/注册路线中:

router.post('/signup', function (req, res) {
     req.assert('email', 'Email is not valid!').isEmail();
     req.assert('password', 'Password is empty!').notEmpty();

      var err = req.validationErrors();

      if (err) {
        req.flash('errors', errors);
        return res.redirect('/login');
      }
// Your passport here....
}

然后办理登录或注册等护照。