NodeJS express-валидатор с паспортом


Я пишу таблицу формы регистрации, и я использую passport-local - это работа, но я хочу добавить express-validator для проверки моих данных формы. Я добавляю проверку на маршрутизаторе, это мой код router/index.js:

/* Handle Registration POST */
router.post('/signup', function(req, res) {
  req.assert('email', 'A valid email is required').isEmail();
  var errors = req.validationErrors();

  if(errors){   //No errors were found.  Passed Validation!
      res.render('register', {
        message: 'Mail type fault',
        errors: errors
      });
  }
  else
  {
    passport.authenticate('signup', {
      successRedirect: '/home',
      failureRedirect: '/signup',
      failureFlash : true
    });
  }
});

Проверка является работой, но в случае успеха и тогда веб-страница будет загружаться в течение длительного времени и не отвечать. У меня есть поиск паспортного документа, но нет идеи, чтобы исправить это.

Это исходный код, это работа

/* Handle Registration POST */
router.post('/signup', passport.authenticate('signup', {
  successRedirect: '/home',
  failureRedirect: '/signup',
  failureFlash : true
}));
Я думаю, что могу использовать jquery для проверки, но я этого не делаю. Потому что я просто хочу попробовать использовать валидатор с паспортом.
3 3

3 ответа:

Выполнение проверки в LocalStrategy вместо маршрутизатора должно работать просто отлично:

passport.use('signup', new LocalStrategy({
    passReqToCallback: true
}, function(req, username, password, callback) {
    /* do your stuff here */
    /* req.assert(...) */
}));

Ввод кода проверки в LocalStartegy должен работать, но лично я бы сначала сделал аутентификацию и после того, как она прошла, использовал паспорт.

Рассмотрим что-то следующее:

router.post('/login',function(req,res){

    req.checkBody('username', 'Username is required').notEmpty();
    req.checkBody('password', 'Password is required').notEmpty();

    //validate 
    var errors = req.validationErrors();

    if (errors) {

        res.render('signup',{user:null,frm_messages:errors});

    }
    else{
        passport.authenticate('login',{
            successRedirect:'/',
            failureRedirect: '/login',
            failureFlash : true  
        })(req,res); // <---- ADDD THIS
    }
});
/* Handle Registration POST */
router.post('/signup', checkEmail,
    passport.authenticate('signup', {
      successRedirect: '/home',
      failureRedirect: '/signup',
      failureFlash : true
    });
});

function checkEmail(req, res, next){
    req.checkBody('username', 'Username is required').notEmpty();
    req.checkBody('password', 'Password is required').notEmpty();
    //validate 
    var errors = req.validationErrors();
    if (errors) {
        res.render('signup',{user:null,frm_messages:errors});
    } else {
      next();
    }
}