护照通过Google reCaptcha进行身份validation

我正在尝试将google reCaptchajoin到我的registry单的后端,这个后端已经有了护照authentication,代码如下:

app.get('/signup', function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message : req.flash('signupMessage') }); }); app.post('/signup', passport.authenticate('local-signup', { successRedirect : '/app', // redirect to the secure chat section failureRedirect : '/signup', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); 

这是我的谷歌recaptha代码:

  app.get('/signup', recaptcha.middleware.render, function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message : req.flash('signupMessage'), captcha : req.recaptcha }); }); app.post('/signup', recaptcha.middleware.verify, function(req, res){ if (!req.recaptcha.error) { //if recaptcha is correct do somthing }else { req.flash('signupMessage','reCAPTCHA Incorrect'); res.redirect('/signup'); } }); 

两者都独立工作,但是当我把它们结合起来的时候:

  app.get('/signup', isNotLoggedIn, recaptcha.middleware.render, function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message : req.flash('signupMessage'), captcha : req.recaptcha }); }); app.post('/signup', recaptcha.middleware.verify, function(req, res){ if (!req.recaptcha.error) { passport.authenticate('local-signup', { successRedirect : '/app', failureRedirect : '/signup', failureFlash : true }); }else { req.flash('signupMessage','reCAPTCHA Incorrect'); res.redirect('/signup'); } }); 

或这个:

  app.get('/signup', isNotLoggedIn, recaptcha.middleware.render, function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message : req.flash('signupMessage'), captcha : req.recaptcha }); }); app.post('/signup', recaptcha.middleware.verify, function(req, res){ if (req.recaptcha.error) { req.flash('signupMessage','reCAPTCHA Incorrect'); res.redirect('/signup'); } }, passport.authenticate('local-signup', { successRedirect : '/app', // redirect to the secure chat section failureRedirect : '/signup', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); 

页面停留在加载状态,没有任何事情发生。

所以我想通了!

诀窍在于使用next(); 函数,如果validation码是正确的,所以代码结束了这样的:

  app.get('/signup', isNotLoggedIn, recaptcha.middleware.render, function(req, res) { // render the page and pass in any flash data if it exists res.render('signup.ejs', { message : req.flash('signupMessage'), captcha : req.recaptcha }); }); app.post('/signup', recaptcha.middleware.verify, captchaVerification, passport.authenticate('local-signup', { successRedirect : '/app', // redirect to the secure chat section failureRedirect : '/signup', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); function captchaVerification(req, res, next) { if (req.recaptcha.error) { req.flash('signupMessage','reCAPTCHA Incorrect'); res.redirect('/signup'); } else { return next(); } } 

这就是你如何整合谷歌captcha你的nodejs,expression,护照,后端