【问题标题】:Passport Authenticate with Google reCaptcha使用 Google reCaptcha 进行护照身份验证
【发布时间】:2017-07-31 02:06:55
【问题描述】:

我正在尝试将 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 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
    }));

页面一直在加载,什么也没有发生。

【问题讨论】:

    标签: javascript node.js express passport.js recaptcha


    【解决方案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、快递、护照、后端

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2015-09-06
      • 2017-01-02
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多