【发布时间】:2018-10-30 01:44:39
【问题描述】:
在我们动态生成的表单上实施 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 检查器,我可以看到带有“g-recaptcha-response”文本区域的 recaptcha DIV,但它是不可见的。正如我所料。
然后,在我的提交函数中,在我进行了一些表单验证之后,我执行了 recaptcha:
grecaptcha.execute(recaptcha_id);
到那时,我预计挑战会突然出现。但事实并非如此。嗯,它做过一次。我的表单提交到我的 PHP 后端,那里有一个 g-recaptcha-response 的参数,但它是空的。一旦出现挑战,g-recaptcha-response 就有了价值。
当调用执行函数时,挑战总是应该出现吗?如果不是,那么我们应该如何处理空响应值?
谢谢, 安迪
【问题讨论】:
-
到那时我希望挑战会突然出现。呃..如果它已经确定你不是机器,那么隐形 recaptcha 不会尝试验证你..你这样做每次调用提交时都需要调用
grecaptcha.execute(),尽管g-recaptcha-response为空很奇怪。尝试时您不离线对吗?浏览器控制台上没有红色,对吧? -
不,看起来没什么问题。所以如果我明白你在说什么,如果我调用 recaptcha.execute,并且 recaptcha 决定不提出挑战,那么 g-recaptcha-response 中应该还有一些东西?
-
好的,我已经取得了进展,我现在可以随意显示挑战(请参阅stackoverflow.com/questions/48224799/test-invisible-recaptcha),但是 - 我无法让它调用我的回调。在我的阅读中,似乎我应该能够在 grecatcha.render 调用中指定回调——真还是假?目前看来,这不是真的。
标签: javascript jquery invisible-recaptcha