错误:不存在reCAPTCHA客户端(reCAPTCHA v3)

错误:不存在reCAPTCHA客户端(reCAPTCHA v3),recaptcha,recaptcha-v3,Recaptcha,Recaptcha V3,我已经在我的一个表单中集成了reCAPTCHA v3。在onload中,在右下角有一个生成的令牌和谷歌验证码徽标。但当我提交表单时,控制台中显示了一个错误,“错误:不存在reCAPTCHA客户端”。此外,似乎“g-recaptcha-response”不会获取任何数据,并且$_POST[“g-recaptcha-response”]仍然为空 以下是示例代码: <script type="text/javascript"> var ReCaptchaCallbackV3 = f

我已经在我的一个表单中集成了reCAPTCHA v3。在onload中,在右下角有一个生成的令牌和谷歌验证码徽标。但当我提交表单时,控制台中显示了一个错误,“错误:不存在reCAPTCHA客户端”。此外,似乎“g-recaptcha-response”不会获取任何数据,并且$_POST[“g-recaptcha-response”]仍然为空

以下是示例代码:

<script type="text/javascript">
    var ReCaptchaCallbackV3 = function() {
        grecaptcha.ready(function() {
            grecaptcha.execute("site_key").then(function(token) {
                console.log("v3 Token: " + token);
            });
        });
    };
</script>

<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=site_key"></script>

var ReCaptchaCallbackV3=函数(){
grecaptcha.ready(函数(){
执行(“站点密钥”)。然后(函数(令牌){
log(“v3令牌:+令牌”);
});
});
};
提交表单时,它不会生成任何“g-recaptcha-response”

我对google reCaptcha了解不多。我遵循了他们提供的文档,并以正确的方式使用了一个站点和一个密钥


有人能告诉我问题出在哪里,可能的解决方案是什么吗?

在尝试发送请求之前,您是否尝试过加载脚本

<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=site_key"></script>
<script type="text/javascript">
    var ReCaptchaCallbackV3 = function() {
        grecaptcha.ready(function() {
            grecaptcha.execute("site_key").then(function(token) {
                console.log("v3 Token: " + token);
            });
        });
    };
</script>

var ReCaptchaCallbackV3=函数(){
grecaptcha.ready(函数(){
执行(“站点密钥”)。然后(函数(令牌){
log(“v3令牌:+令牌”);
});
});
};

在用户与Recaptcha 2交互之前,这也会发生在Recaptcha 2中。因此,我有一个submit按钮,它触发一个JS函数来检查recaptcha的值。为了解决不存在客户的问题,我做了:

try {
   data["reCaptcha"] = grecaptcha.getResponse();
} catch (err) {
   data["reCaptcha"] = "";
}

然后,数据对象被发送到后端脚本,该脚本验证recaptcha。后端还检查字段是否为空

我相信当重新加载recaptchaapi.js时会发生此错误,但您的容器尚未出现在页面上(至少对于v2)。我在React应用程序中导航到页面而不是将其作为第一次加载时发生了此错误。我没有使用
render=explicit
和全局名称空间
onLoadCallback
,而是能够通过手动呈现captcha元素来解决它

不要创建一个
,只给容器div一个id(
),并在JS代码中呈现它(例如,在React应用程序的
组件安装中):


当我在reCAPTCHA v3中遇到这个问题时,是因为我没有传递正确的站点密钥。

我遇到这个问题是因为我调用了
grecaptcha.reset()当站点上没有任何Recaptcha活动时

grecaptcha.reset();
recaptcha__en.js:507 Uncaught Error: No reCAPTCHA clients exist.
    at MX (recaptcha__en.js:507)
    at Object.Zn [as reset] (recaptcha__en.js:514)
    at <anonymous>:1:13
grecaptcha.reset();
recaptcha__en.js:507未捕获错误:不存在recaptcha客户端。
在MX(重述Cha__en.js:507)
at Object.Zn[as reset](recaptcha__en.js:514)
时间:1:13

我在使用React,有时只渲染我的验证码容器。通过隐藏验证码按钮而不是不呈现它来修复。

可能相关?有可能有一个?试过了。问题仍然存在@NinoFiliu,添加了代码片段。回答得很好!感谢我们有一个遗留的V2代码,V3文档中甚至没有提到.reset(),对我来说,我错误地传递了未定义的代码。在这种情况下,错误应该更具描述性,但不幸的是,事实并非如此。
grecaptcha.reset();
recaptcha__en.js:507 Uncaught Error: No reCAPTCHA clients exist.
    at MX (recaptcha__en.js:507)
    at Object.Zn [as reset] (recaptcha__en.js:514)
    at <anonymous>:1:13