使用 Google reCaptcha 进行护照验证
Passport Authenticate with Google reCaptcha
我正在尝试将 google 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
}));
这是我的 google 重述代码:
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();如果验证码是正确的,那么代码将像这样结束:
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();
}
}
这就是您将 google 验证码集成到您的 nodejs、express、passport、后端的方式
我正在尝试将 google 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
}));
这是我的 google 重述代码:
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();如果验证码是正确的,那么代码将像这样结束:
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();
}
}
这就是您将 google 验证码集成到您的 nodejs、express、passport、后端的方式