隐形reCAPTCHA - 缺少必需参数:sitekey

jur*_*pro 4 javascript recaptcha invisible-recaptcha

我正在使用具有类的按钮为每个表单动态加载Invisible reCAPTCHA g-recaptcha.

我遇到的问题是验证码没有正确加载,我不知道为什么.我关注验证码网站上的文档,我不知道如何以及为什么我收到此错误:

Uncaught Error: Missing required parameters: sitekey
Run Code Online (Sandbox Code Playgroud)

有谁知道问题出在哪里?

这是我使用的代码:

<script src='https://www.google.com/recaptcha/api.js?onload=onloadCallback&hl={{  app.request.locale|default(defaultLang) }}' async defer></script>
Run Code Online (Sandbox Code Playgroud)

JS

var onloadCallback = function () {
    $("button.g-recaptcha").each(function () {
        var el = $(this);
        //SITE_KEY is actually hard coded string.
        //It is string that google provided. I just remove it for security reasons...
        grecaptcha.render($(el).attr("id"), {
            "sitekey": SITE_KEY,  
            "size": "invisible",
            "badge": "inline",
            "callback": function (token) {
                $(el).parent().find(".g-recaptcha-response").val(token);
                $(el).closest("form").submit();
            }
        }, true);
    });

    $("button.g-recaptcha").click(function(event) {
        event.preventDefault();
        grecaptcha.execute();
    });
};
Run Code Online (Sandbox Code Playgroud)

HTML示例:

<button 
    type="submit" 
    id="submitReviewButton"
    class="btn btn-lg btn-submit btn--green g-recaptcha"
 >
    {{ "review.submit_your_review"|trans }}
</button>
Run Code Online (Sandbox Code Playgroud)

Ros*_*ala 10

你在这里错过了一个重要的部分.必须显式呈现api小部件.只需添加render=explicit到recaptcha api脚本即可.

<script src='https://www.google.com/recaptcha/api.js?
onload=onloadCallback
&render=explicit
&hl={{app.request.locale|default(defaultLang) }}' async defer>
</script>
Run Code Online (Sandbox Code Playgroud)

阅读Google doc(reCAPTCHA V2 | reCAPTCHA - 显式渲染reCAPTCHA小部件).

  • 还请确保,如果您在grecaptcha.render(container,params)方法中传入一个dom对象作为容器,则它实际上是一个dom对象,而不是jQuery对象。 (3认同)