Error: No reCAPTCHA clients exist (reCAPTCHA v3)
Error: No reCAPTCHA clients exist (reCAPTCHA v3)
我已经在我的一个表单中集成了 reCAPTCHA v3。在 onload 中,右下角会生成一个令牌和 google 验证码徽标。但是当我提交表单时,在控制台中显示错误 "Error: No reCAPTCHA clients exist"。此外,似乎 "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>
提交表单时不产生任何"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>
这也发生在用户与 Recaptcha 2 交互之前。所以,我有一个提交按钮,它触发一个检查 recaptcha 值的 JS 函数。为了解决没有客户端存在的问题,我做了:
try {
data["reCaptcha"] = grecaptcha.getResponse();
} catch (err) {
data["reCaptcha"] = "";
}
然后数据对象被发送到验证 recaptcha 的后端脚本。后端还会检查该字段是否为空。
我相信这个错误发生在 reCaptcha api.js 加载时,但您的容器还没有出现在页面上(至少对于 v2)。当我导航到页面而不是第一次加载它时,我在 React 应用程序中发生了这个错误。我没有使用 render=explicit
并使用全局命名空间 onLoadCallback
,而是能够通过手动呈现验证码元素来解决它。
与其创建 <div class="g-recaptcha"></div>
,不如仅给容器 div 一个 ID (<div id="recaptcha-container"></div>
) 并在您的 JS 代码中呈现它(例如,在 componentDidMount
中反应应用程序):
grecaptcha.ready(function() {
grecaptcha.render("recaptcha-container", {
"sitekey": "your-site-key"
});
});
当我在使用 reCAPTCHA v3 时遇到这个问题,是因为我没有向它传递正确的站点密钥。
我遇到这个问题是因为当网站上没有任何 Recaptcha 活动时我正在调用 grecaptcha.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
我使用的是 React,有时只渲染我的验证码容器。通过隐藏验证码按钮而不是不呈现它来修复。
我已经在我的一个表单中集成了 reCAPTCHA v3。在 onload 中,右下角会生成一个令牌和 google 验证码徽标。但是当我提交表单时,在控制台中显示错误 "Error: No reCAPTCHA clients exist"。此外,似乎 "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>
提交表单时不产生任何"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>
这也发生在用户与 Recaptcha 2 交互之前。所以,我有一个提交按钮,它触发一个检查 recaptcha 值的 JS 函数。为了解决没有客户端存在的问题,我做了:
try {
data["reCaptcha"] = grecaptcha.getResponse();
} catch (err) {
data["reCaptcha"] = "";
}
然后数据对象被发送到验证 recaptcha 的后端脚本。后端还会检查该字段是否为空。
我相信这个错误发生在 reCaptcha api.js 加载时,但您的容器还没有出现在页面上(至少对于 v2)。当我导航到页面而不是第一次加载它时,我在 React 应用程序中发生了这个错误。我没有使用 render=explicit
并使用全局命名空间 onLoadCallback
,而是能够通过手动呈现验证码元素来解决它。
与其创建 <div class="g-recaptcha"></div>
,不如仅给容器 div 一个 ID (<div id="recaptcha-container"></div>
) 并在您的 JS 代码中呈现它(例如,在 componentDidMount
中反应应用程序):
grecaptcha.ready(function() {
grecaptcha.render("recaptcha-container", {
"sitekey": "your-site-key"
});
});
当我在使用 reCAPTCHA v3 时遇到这个问题,是因为我没有向它传递正确的站点密钥。
我遇到这个问题是因为当网站上没有任何 Recaptcha 活动时我正在调用 grecaptcha.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
我使用的是 React,有时只渲染我的验证码容器。通过隐藏验证码按钮而不是不呈现它来修复。