Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用node.js验证google invisible recaptcha时出现问题_Node.js_Reactjs_Express_Redux_Invisible Recaptcha - Fatal编程技术网

使用node.js验证google invisible recaptcha时出现问题

使用node.js验证google invisible recaptcha时出现问题,node.js,reactjs,express,redux,invisible-recaptcha,Node.js,Reactjs,Express,Redux,Invisible Recaptcha,我正在使用npm recaptcha验证插件: 在我的react应用程序中,我正在使用 在我的节点应用程序代码的顶部: var Recaptcha = require('recaptcha-verify'); var recaptcha = new Recaptcha({ secret: 'secret_key', verbose: true }); 然后,发送电子邮件而无需重新发送邮件的路线会很好地工作 router.post('/mailer/recaptcha', f

我正在使用npm recaptcha验证插件:

在我的react应用程序中,我正在使用

在我的节点应用程序代码的顶部:

var Recaptcha = require('recaptcha-verify');
var recaptcha = new Recaptcha({
    secret: 'secret_key',
    verbose: true
});
然后,发送电子邮件而无需重新发送邮件的路线会很好地工作

router.post('/mailer/recaptcha', function(req, res) {

   var userResponse = req.query['g-recaptcha-response'];
   console.log("user response: ", userResponse)

   recaptcha.checkResponse(userResponse, function(error, response){
       if(error){
        // an internal error? 
        res.status(400).render('400', {
            message: error.toString()
        });
        return;
    }
    if(response.success){
        res.status(200).send('the user is a HUMAN :)');
        // save session.. create user.. save form data.. render page, return json.. etc. 

    }else{
        res.status(200).send('the user is a ROBOT :(');
        // show warning, render page, return a json, etc. 
    }
});
在表单中,使用react插件,我也在尝试遵循文档,现在看起来是这样的

 <Recaptcha
  ref={ ref => this.recaptcha = ref }                                  
  sitekey="site_key"
  onResolved={ this.testRecaptcha } />
当我检查recaptcha组件输出的代码时,它看起来如下所示:

<div style="display: none;"><div class="grecaptcha-badge" style="width: 256px; height: 60px; transition: right 0.3s ease; position: fixed; bottom: 14px; right: -186px; box-shadow: gray 0px 0px 5px;"><div class="grecaptcha-logo"><iframe src="https://www.google.com/recaptcha/api2/anchor?k=sitekey&amp;co=aHR0cDovL2xvY2FsaG9zdDo4MDgx&amp;hl=en&amp;v=v1514934548259&amp;size=invisible&amp;cb=oh5n23icp55m" width="256" height="60" role="presentation" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox"></iframe></div><div class="grecaptcha-error"></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none;  display: none; "></textarea></div></div>
而且

在节点后端:

var userResponse = req.body.recaptchaResponse;

recaptcha.checkResponse(userResponse, function(error, response){ etc..});
但是。。。我现在得到这个错误。
分析对对象的响应时出错。“没有指定默认引擎,也没有提供扩展名。”

您需要通过访问onResolved回调中的this.reCaptcha.getResponse来获取已解决的reCaptcha的响应令牌,然后将其添加到POST数据中,并在节点后端验证该令牌。

这是绝对必要的。非常感谢。它现在在node.js端通过。我现在得到一个长字符串键作为响应,当我在recaptcha.checkResponseuserResponse、functionerror、response{}中测试它时;它在这里给了我这个响应:CAPTCHA>错误解析:{success:true,challenge_ts:'2018-01-18T20:45:44Z',主机名:'localhost'}但是我得到一个错误:解析对象的响应时出错。和未指定默认引擎,也未提供扩展。有什么想法吗?
testRecaptcha(e) {

        let recaptchaResponse = this.recaptcha.getResponse();

        let myObject = Object.assign({}, this.state.form, { sentFrom: 'contact', sendTo: this.state.sendTo, recaptchaResponse:recaptchaResponse });
        this.props.dispatch(actions.sendTestToMailer(myObject));
    }
var userResponse = req.body.recaptchaResponse;

recaptcha.checkResponse(userResponse, function(error, response){ etc..});