reCaptcha 小部件不会过期,并且永远不会调用过期的回调

Mac*_*zyk 5 javascript captcha recaptcha

我无法在我的 ajax 联系表单中集成 reCaptcha。它有效,仅在用户完成挑战后的前 2 分钟内有效。ReCaptcha 将在 2 分钟后过期。问题是小部件完好无损,没有像“会话已过期。再次完成挑战”。用户无法执行任何操作,只能重新加载页面。也不会调用过期回调(显然因为小部件不会过期)。

我可以在完成后设置一个 2 分钟的计时器来重置小部件。那会奏效,但有点麻烦,如果 Google 将来选择更改过期时间会怎样。任何想法为什么它不会过期?

我尝试了两种集成小部件的方法(自动和显式)

编辑:这是代码,我制作了一个小示例 html 文件并证明它不起作用。

<html>
<head></head>

<body>

        <div id="google-recaptcha-widget"></div>

<script>
        var expiredCallback = function() {
            alert('expired!');
        }

        var recaptchaLoad = function() {

                grecaptcha.render('google-recaptcha-widget', {
                        'sitekey' : 'mysitekey'
                        'expired-callback': expiredCallback
                });

        }

</script>

<script src="https://www.google.com/recaptcha/api.js?onload=recaptchaLoad&render=explicit" async defer></script>

</body></html>
Run Code Online (Sandbox Code Playgroud)

小智 2

<div id="google-recaptcha-widget" class="g-recaptcha" data-sitekey="mySiteKey" data-callback="myCallbackMethod" data-expired-callback="expiredCallback"></div>

<script>
    function myCallbackMethod() {
        // save the world
    }

    function expiredCallback() {
        // Uh oh, reCAPTCHA expired, hack the world
    }
</script>
Run Code Online (Sandbox Code Playgroud)