2017-07-31 52 views
1

我试图将谷歌的reCAPTCHA我的注册表格的已经有Passport身份验证就可以了代码后端看起来是这样的:护照身份验证与谷歌的reCAPTCHA

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 
    })); 

页面停留在加载并没有什么happends。

回答

1

所以我想通了!

诀窍在于使用next();如果验证码是正确的功能,所以代码最终是这样的:

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(); 
    } 
} 

并且那你怎么谷歌验证码集成到您的NodeJS,快递,护照,后端