无形的重新捕获-挑战不出现

时间:2018-10-25 22:39:44

标签: javascript jquery invisible-recaptcha

在我们动态生成的表单上实现Invisible reCAPTCHA。我们的from引擎从数据库中获取一个字段列表,并使用表单字段动态填充DOM,显示它并处理帖子。要使用Invisible reCAPTCHA:

页面加载完成后,我正在加载google api代码:

<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>

一旦从数据库中加载了表单,我就将recaptcha div注入到字段列表中:

form.fields.push( { html: '<div id="g-recaptcha-div" class="g-recaptcha" data-sitekey="<my site key>" data-badge="inline" data-size="invisible"></div>',
                    type: 'html'
                  } );

稍后,我将表单附加到DOM(jQuery'appendTo')上,然后紧接着,我渲染reCAPTCHA:

recaptcha_id = grecaptcha.render("g-recaptcha-div", 
                   { 
                     'data-callback': _settings.form.submit,
                     'sitekey'      : <my site key>
                   }, true 
                 );

并显示该表单,带有reCAPTCHA徽章/受图标保护。看着DOM检查器,我可以看到recaptcha DIV,其中有“ g-recaptcha-response”文本区域,但是它是不可见的。如我所料。

然后,在我的Submit函数中,在执行一些表单验证之后,我执行recaptcha:

grecaptcha.execute(recaptcha_id);

到这一点,我希望挑战会弹出。但事实并非如此。好吧,它做了一次。我的表单提交到我的PHP后端,那里有一个g-recaptcha-response参数,但它是空的。挑战出现的那一次,g-recaptcha-response具有价值。

是否总是应该在调用execute函数时出现挑战?如果不是,那么我们应该如何处理空响应值?

谢谢, 安迪

1 个答案:

答案 0 :(得分:0)

好吧,对于那些在家中跟随的人:

1)是,您可以在对grecaptcha.render的调用中指定回调函数的名称。更深入地了解,我在此页面(Problem Image)上注意到,我需要像下面这样指定函数的名称:

recaptcha_id = grecaptcha.render("g-recaptcha-div", 
                                  { 
                                    'sitekey'  : <my site key>,
                                    'callback' : <callback>
                                  }, true 
                                );

我试图使用“数据回调”,这是如何在HTML中指定它。 h!为了回答我的另一个问题,正确执行此操作后,无论是否提出质询,都会使用令牌调用回调。