【问题标题】:invisible recaptcha - challenge not appearing看不见的recaptcha - 挑战没有出现
【发布时间】:2018-10-30 01:44:39
【问题描述】:

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

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

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

从数据库加载表单后,我将 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 'appendTo'),然后立即渲染 reCAPTCHA:

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

并出现表单,并显示 reCAPTCHA 徽章/受图标保护。查看 DOM 检查器,我可以看到带有“g-recaptcha-response”文本区域的 recaptcha DIV,但它是不可见的。正如我所料。

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

grecaptcha.execute(recaptcha_id);

到那时,我预计挑战会突然出现。但事实并非如此。嗯,它做过一次。我的表单提交到我的 PHP 后端,那里有一个 g-recaptcha-response 的参数,但它是空的。一旦出现挑战,g-recaptcha-response 就有了价值。

当调用执行函数时,挑战总是应该出现吗?如果不是,那么我们应该如何处理空响应值?

谢谢, 安迪

【问题讨论】:

  • 到那时我希望挑战会突然出现。呃..如果它已经确定你不是机器,那么隐形 recaptcha 不会尝试验证你..你这样做每次调用提交时都需要调用grecaptcha.execute(),尽管g-recaptcha-response 为空很奇怪。尝试时您不离线对吗?浏览器控制台上没有红色,对吧?
  • 不,看起来没什么问题。所以如果我明白你在说什么,如果我调用 recaptcha.execute,并且 recaptcha 决定不提出挑战,那么 g-recaptcha-response 中应该还有一些东西?
  • 好的,我已经取得了进展,我现在可以随意显示挑战(请参阅stackoverflow.com/questions/48224799/test-invisible-recaptcha),但是 - 我无法让它调用我的回调。在我的阅读中,似乎我应该能够在 grecatcha.render 调用中指定回调——真还是假?目前看来,这不是真的。

标签: javascript jquery invisible-recaptcha


【解决方案1】:

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

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 中指定它的方法。嗬!为了回答我的另一个问题,一旦您正确执行此操作,无论是否呈现挑战,都会使用令牌调用回调。

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多