reCAPTCHA v3 - 错误:没有reCAPTCHA客户端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了reCAPTCHA v3 - 错误:没有reCAPTCHA客户端相关的知识,希望对你有一定的参考价值。
首先,我知道在这里已经发现了同样的问题: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>
加载Captcha并生成令牌。当我提交表单时,我调用以下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)
我做错了什么?我遵循谷歌的指示,但也许我错过了一些东西。
答案
您可以使用以下方法重新实现:
<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 Payload中。
现在,为了避免在第二次表单提交期间出错,您可以调用_RECAPTCHA.init()方法;在Ajax调用的成功回调中。
以上是关于reCAPTCHA v3 - 错误:没有reCAPTCHA客户端的主要内容,如果未能解决你的问题,请参考以下文章
php 渲染嵌入在自定义内容中的所有ReCaptcha Hustle弹出窗口。如果带有ReCaptcha(Formidable Forms)的表单嵌入在Popup中,则为ReCap
reCAPTCHA v3 not working angular 6 - 执行错误
Google recaptcha v3-获取控制台错误 net::ERR_BLOCKED_BY_RESPONSE 200 [关闭]