【发布时间】:2016-10-07 23:31:32
【问题描述】:
我正在使用 RecaptchaV2,并将其用作对我的软件进行身份验证的第一步验证。身份验证过程通常如下所示:
输入用户 ID > 验证 recaptcha > 执行进一步的身份验证(可配置,例如密码 + 2fa)
理想情况下,我希望能够在执行 recpatcha 时检测到用户失败,并在用户失败太多次时临时锁定 IP 地址或用户 ID。然而,Recaptcha 似乎没有针对失败情况的回调,并且只提供了一个在成功时调用的“数据回调”参数。所有验证似乎都完全封装在小部件中,并且在验证成功之前,我的代码永远不会被告知验证状态。
我的代码基本上只是文档 (https://developers.google.com/recaptcha/docs/display#auto_render) 中的示例,还有一些额外的功能,可以在验证码完成后自动提交页面上的表单。这是粗略的轮廓:
<div style="text-align: center" id="g-recaptcha-container">
<div class="g-recaptcha" data-sitekey="secret-site-key" data-callback="recaptcha2_success" style="display: inline-block"></div>
</div>
还有我的javascript:
function recaptcha2_success(response) {
var proceed = document.getElementById('g-recaptcha-proceed');
var form = document.getElementsByName('login-form');
// display the loading message
if (proceed !== undefined) {
proceed.style.display = 'block';
}
// submit the main form
if (form.length > 0) {
form[0].submit();
}
}
有人有什么建议吗?我在开发者文档中找不到任何相关内容。
【问题讨论】:
-
在这里查看我的答案,它可能会对您有所帮助。 stackoverflow.com/a/37733209/5190589
-
感谢您抽出宝贵时间回复,colecmc 和 Ryan89。链接的提交实际上与我想要的相反。表单本身仅包含 reCaptcha 小部件。一旦用户与小部件交互,表单就会自动提交。问题是 reCaptcha 小部件仅在 成功 验证时调用我的 Javascript,而不是在 失败 时调用。这使我无法检测到故障并执行锁定。
-
据我所知,检测验证码失败的唯一方法是提交表单,然后不会设置 POST["g-recaptcha-response"],这意味着它没有完成,或者如果来自 google 的响应返回的值不是成功,那么您可以重定向回您的验证码页面来处理它。我还发现了这篇文章,recaptcha 是用 AJAX 提交的,所以没有加载新页面,它可能有用。 stackoverflow.com/questions/30006081/recaptcha-2-0-with-ajax
标签: javascript recaptcha