javascript - reCAPTCHA v3 - 错误 : No reCAPTCHA clients exist

标签 javascript php ajax recaptcha captcha

首先,我知道这里已经发现了同样的问题: Error: No reCAPTCHA clients exist (reCAPTCHA v3)但由于那里的答案并没有让我找到解决方案,我在这里试试运气。


所以我尝试使用 reCAPTCHA,因为我从我网页上的表单中收到了很多垃圾邮件。在我的 HTML 头中,我有这样的代码:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
  grecaptcha.execute("MY_SITE_KEY").then(function(token) {
    console.log(token);
  });
});
</script>

加载验证码并生成 token 。当我提交表单时,我调用以下 ajax 代码:

$.ajax({
  type: 'POST',
  url: $(form).attr('action'),
  data: {
    name: name,
    email: email,
    message: message,
    captcha: grecaptcha.getResponse()
}).done(function(response){ ... })

最后在 PHP 中我执行以下操作:

<?php

  $secret = "MY_SECRET_KEY";
  $response = $_POST["captcha"];
  $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
  $captcha_success=json_decode($verify);

    if ($captcha_success->success==false) {
      echo "reCaptcha indentified you as a bot. We don't like bots here.";
    }
    else if ($captcha_success->success==true) {

      // MY WHOLE mail() function here

    }

?>

然后当我提交表单时,出现错误:

Uncaught Error: No reCAPTCHA clients exist.
    at Gw (recaptcha__de.js:511)
    at Object.Q5 [as getResponse] (recaptcha__de.js:519)
    at HTMLFormElement.<anonymous> (main.js:265)
    at HTMLFormElement.dispatch (jquery.min.js:3)
    at HTMLFormElement.q.handle (jquery.min.js:3)

我做错了什么?我按照 Google 的说明进行操作,但也许我遗漏了什么。

最佳答案

您可以通过以下方法重新实现:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
var grecaptchaSiteKey = 'MY_SITE_KEY';

var _RECAPTCHA = _RECAPTCHA || {};

_RECAPTCHA.init = function() {
    grecaptcha.ready(function() {
        grecaptcha.execute(grecaptchaSiteKey, {action: 'homepage'}).then(function(token) {
            if (jQuery(form)[0]) {
                if (jQuery('.grecaptchaToken')[0]) {
                    jQuery(form).find('.grecaptchaToken').remove();
                }

                jQuery(form).append('<input type="hidden" class="grecaptchaToken" name="grecaptchaToken" value="' + token + '" />');
            }
        });
    });
}

_RECAPTCHA.init();

</script>

之后您可以获得隐藏输入的值并将其放入 Ajax 有效负载中。

现在,为了避免在第二次提交表单时出错,您可以调用 _RECAPTCHA.init() 方法;在 Ajax 调用的成功回调中。

关于javascript - reCAPTCHA v3 - 错误 : No reCAPTCHA clients exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55162948/

相关文章:

javascript - Angular : Loading HTTP request data into a controller without ng-init

php - 使用 MySQL 在 PHP 中创建多行表

javascript - AJAX动态内容 "event delegation"替换为 "each"

javascript - 如何通过ajax load()函数发送图像文件并通过php插入mysql db显示在div中

php - Mysql 循环遍历行来检查行,直到找到计数为零的行

ajax - Vue.js:如何传入不是父/访问 vue 方法的数据?

javascript - 如何防止 JavaScript 中长按?

javascript - 带有下拉移动汉堡包图标的响应式导航栏在切换时消失

javascript - FabricJS - ZoomToPoint 不适用于 backgroundImage

php - 如何将多个表单验证请求链接在一起?