具有护照的NodeJS快速验证器

lig*_*ter 3 validation node.js passport.js

我写了一个注册表单,我使用的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
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

验证是有效的,但如果成功,那么网页将加载很长时间而没有响应.我已经搜索了护照文档,但不知道要修复它.

这是原始代码,它的工作原理

/* Handle Registration POST */
router.post('/signup', passport.authenticate('signup', {
  successRedirect: '/home',
  failureRedirect: '/signup',
  failureFlash : true
}));
Run Code Online (Sandbox Code Playgroud)

我想我可以使用jquery来检查,但我不这样做.因为我只想尝试使用带护照的验证器.

yea*_*xon 9

在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
    }
});
Run Code Online (Sandbox Code Playgroud)


Lau*_*ura 2

在 LocalStrategy 而不是路由器中进行验证应该可以正常工作:

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