【发布时间】:2015-11-04 20:47:39
【问题描述】:
我刚刚开始试用 Google 的 reCAPTCHA 工具/服务,不知道它的工作原理。我遵循了似乎对我有用的 2.0 版本指南(在我的本地主机上) - 但我还没有必须使用密钥。仅当主机/域不是“localhost”时才需要密钥吗?
我们的网站依赖于 DWR (AJAX) 而不是表单提交来与我们的后端交互,所以我希望必须以某种方式捕获用户的响应并将其发送到我们的 DWR java 方法,然后我会将其发布到 Google 的验证服务网址。不过,我似乎不需要这样做。
我已将这些添加到我的主 jsp 文件中:
<script src='https://www.google.com/recaptcha/api.js?onload=onloadCaptchaCallback&render=explicit' async defer></script>
...
<div id="captchaDiv"></div>
然后我添加的javascript是:
var onloadCaptchaCallback = function() {
grecaptcha.render('captchaDiv', {
'sitekey' : 'MYSITEKEY',
'callback' : verifyCaptchaCallback
});
}
var verifyCaptchaCallback = function(g_recaptcha_response) {
console.log("Response validated. Not a robot.");
// thought I would need to add DWR (AJAX) call here to verify the response
// but this callback is only getting called on a successful response
// anyway - so no need to verify with google's service URL?
}
verifyCaptchaCallback 函数只有在用户满足挑战时才会被调用。我还没有使用密钥。我错过了什么吗?或者这是版本 2 的预期工作方式 - 无需服务器端处理?我看到,当我单击挑战图像对话框上的验证按钮时,一个 POST 被发送到谷歌并显然返回一个失败/成功标志,导致 reCAPTCHA 呈现另一个图像挑战或停止。我没有手动将结果发送到谷歌的验证服务 URL - 它似乎是自动发生的。这种行为是否只是因为我仍在使用“localhost”在我的开发人员系统上进行测试而发生 - 一旦 web 应用程序移动到我们的客户系统,该行为就会失败?
感谢您提供的任何澄清。 格雷戈尔
【问题讨论】:
标签: javascript recaptcha verify