Проверка подлинности паспорта с помощью Google reCaptcha

1

Я пытаюсь включить 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
    }));

И это мой код recaptha 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
    }));

Страница остается при загрузке, и ничего не происходит.

Теги:
express
passport.js
recaptcha

1 ответ

2
Лучший ответ

Поэтому я понял это!

Трюк заключается в использовании next(); если код captcha правильный, поэтому код заканчивается следующим образом:

    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 captcha в свои узлы, экспресс, паспорт, back-end

Ещё вопросы

Сообщество Overcoder
Наверх
Меню