谷歌reCAPTCHA在第二次提交时失败

15

我在这个教程中实现了reCAPTCHA:

https://codeforgeek.com/2014/12/google-recaptcha-tutorial/

在第一次提交时,它能够正常工作。但我遇到了以下问题:

  1. 我将验证码与其他表单数据(例如用户名、电子邮件等)一起发送,因此如果验证码是正确的但其他不正确,则用户将再次发送表单,但第二次返回 "{ "success": false }"

  2. 如果我闲置超过 ~2 分钟,会话将过期,如果我选中该框,它会弹出警告,指示“无法刷新:无效参数”,并且我无法再次选择该框

如何解决这些问题?非常感谢。

2个回答

26

Google reCAPTCHA提供了这两个功能:我通常在所有使用AJAX的表单中都会使用它们。

grecaptcha.getResponse()

grecaptcha.reset();

对于你的两个问题,只要在JavaScript代码中需要时就使用第二个函数。

请记住,如果您的页面上有多个验证码,则应按照Google文档中所述使用它们的ID。

https://developers.google.com/recaptcha/docs/display#js_api


谢谢。这解决了问题。 - ranjan un

1
如果您在研究过程中遇到同样的问题并且看到了这个主题;如果您在自动渲染验证码时遇到问题,请尝试显式地进行渲染。为此,请在body标签内添加以下代码。
<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=explicit&hl=tr" async defer></script>
  1.                         var recaptchaCallback = function () {
                               //  alert("grecaptcha is ready!");
                                grecaptcha.render("YOUR HTML DIV ID", {
                             'sitekey': 'YOUR SITE KEY', 
                                });
                            };
    
  2. I'm using AJAX to check registration form and get response. So I have added reset function to my AJAX response.

    $('#frmRegistration').submit(function () { $.ajax({ url: "_ajax/_ajaxRegistration.php", type: "POST", data: $('#frmRegistration').serialize(), success: function (reply) { $('#resultRegistration').html(reply); grecaptcha.reset(); } }); });

参考 Google reCaptcha 显式渲染


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接