在我们动态生成的表单上实现不可见的reCAPTCHA。我们的from引擎从数据库中获取字段列表,并动态地用表单字段填充DOM,显示它,并处理post。若要使用不可见的reCAPTCHA:
当页面加载完毕时,我正在加载google代码:
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>一旦从DB加载了我的表单,我就将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检查器,我可以使用“g- recaptcha -response”文本区域,但它是不可见的。如我所料。
然后,在我的submit函数中,在进行了一些表单验证之后,我执行了recaptcha:
grecaptcha.execute(recaptcha_id);到那时,我会预料到挑战会出现。但事实并非如此。是的,曾经如此。我的表单提交给我的PHP后端,其中有一个参数用于g-recaptcha-响应,但它是空的。有一次,当挑战出现时,g-recaptcha-响应有一个值。
当调用execute函数时,是否总是应该出现挑战?如果没有,那么我们应该如何处理空响应值?
谢谢你,安迪
发布于 2018-10-29 17:44:39
好的,对于那些在家里跟着的人:
1)是的,可以在对grecaptcha.render的调用中指定回调函数的名称。更深入地看,我在这个页面(api)上注意到,我需要指定函数的名称如下:
recaptcha_id = grecaptcha.render("g-recaptcha-div",
{
'sitekey' : <my site key>,
'callback' : <callback>
}, true
);我试图使用“数据回调”,这就是如何在HTML中指定它。哈!为了回答我的另一个问题,一旦您正确地执行了这个任务,就会使用一个标记来调用回调,不管是否呈现了这个挑战。
https://stackoverflow.com/questions/52999060
复制相似问题