在我们动态生成的表单上实现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函数时出现挑战?如果不是,那么我们应该如何处理空响应值?
谢谢, 安迪