首页 文章

看不见的回扣 - 挑战没有出现

提问于
浏览
0

在动态生成的表单上实现Invisible reCAPTCHA . 我们的引擎从数据库中获取字段列表,并使用表单字段动态填充DOM,显示它并处理帖子 . 要使用Invisible reCAPTCHA:

当我的页面加载完成后,我正在加载google api代码:

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

从DB加载表单后,我将recaptcha div注入到我的字段列表中:

form.fields.push( { html: '<div id="g-recaptcha-div" class="g-recaptcha" data-sitekey="<my site key>" data-badge="inline" data-size="invisible"></div>',
                    type: 'html'
                  } );

稍后,我将表单附加到DOM(jQuery'sadndTo'),然后立即渲染reCAPTCHA:

recaptcha_id = grecaptcha.render("g-recaptcha-div", 
                   { 
                     'data-callback': _settings.form.submit,
                     'sitekey'      : <my site key>
                   }, true 
                 );

并显示表格,带有reCAPTCHA徽章/受图标显示保护 . 看看DOM检查员,我可以用那里的“g-recaptcha-response”textarea重新接收DIV,但它是隐形的 . 正如我所料 .

然后,在我的提交函数中,在我进行一些表单验证后,我执行recaptcha:

grecaptcha.execute(recaptcha_id);

在这一点上,我希望挑战能够突然出现 . 但事实并非如此 . 嗯,它曾经做过一次 . 我的表单提交到我的PHP后端,其中有一个g-recaptcha-response的参数,但它是空的 . 挑战出现的那一次,g-recaptcha-response有一个 Value .

在调用execute函数时,是否总是应该出现挑战?如果没有,那么我们应该如何处理空响应值?

谢谢,安迪

1 回答

  • 0

    好吧,对于那些在家里跟随的人:

    1)是的,您可以在grecaptcha.render调用中指定回调函数的名称 . 看得更深,我注意到在这个页面上(https://developers.google.com/recaptcha/docs/invisible#js_api),我需要指定函数的名称,如下所示:

    recaptcha_id = grecaptcha.render("g-recaptcha-div", 
                                      { 
                                        'sitekey'  : <my site key>,
                                        'callback' : <callback>
                                      }, true 
                                    );
    

    我试图使用“数据回调”,这是如何在HTML中指定它 . 卫生署!回答我的另一个问题,一旦你正确地执行了这个操作,无论是否呈现挑战,都会使用令牌调用回调 .

相关问题