错误消息
我们检测到您的网站未验证reCAPTCHA解决方案。这是在您的网站上正确使用reCAPTCHA所必需的。有关详细信息,请参阅我们的开发者网站。
我创建了这个reCaptcha代码,它运行良好,但我不知道如何验证它,我认为它是通过函数验证
grecaptcha.getResponse();
但事实并非如此。
显然,recaptcha在网站上运行良好,但我刚在谷歌管理员看到下一条消息:
要求:
1.不要在表单中使用action="file.php"
,只在表单中使用javascript函数。
<!DOCTYPE>
<html>
<head >
<title></title>
<script src='https://www.google.com/recaptcha/api.js'></script>
<script type="text/javascript">
function get_action() {
var v = grecaptcha.getResponse();
console.log("Resp" + v );
if (v == '') {
document.getElementById('captcha').innerHTML = "You can't leave Captcha Code empty";
return false;
}
else {
document.getElementById('captcha').innerHTML = "Captcha completed";
return true;
}
}
</script>
</head>
<body>
<form id="form1" onsubmit="return get_action();">
<div>
<div class="g-recaptcha" data-sitekey="6LdNIlAUAAAAADS_uVMUayu5Z8C0tw_jspdntbYl"></div>
</div>
<input type="submit" value="Button" />
<div id="captcha"></div>
</form>
</body>
</html>
请你帮我。我会很感激
我如何验证它,因为我提交时需要使用javascript函数onsubmit="return get_action();"
而不是action="file.php"
*:
答案 0 :(得分:4)
grecaptcha.getResponse()
功能只会为您提供用户响应令牌,然后必须通过google reCAPTCHA服务器上的HTTP POST
调用进行验证。
您可以使用AJAX请求来验证令牌,但出于安全原因,这些验证应始终在服务器端完成 - JavaScript可能始终被用户干扰并被欺骗相信reCAPTCHA已成功验证。
获得响应令牌后,您需要使用以下API使用reCAPTCHA对其进行验证,以确保令牌有效。
因此,您需要做的是将reCAPTCHA密码(在reCAPTCHA管理页面中为您生成的第二个密钥)和用户响应令牌(从grecaptcha.getResponse()
函数接收的密钥)发送到reCAPTCHA API,如reCAPTCHA docs
在PHP 中,你会做这样的事情:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'secret' => YOUR_RECAPTCHA_SECRET,
'response' => USER_RESPONSE_TOKEN,
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$response = @json_decode($data);
if ($response && $response->success)
{
// validation succeeded, user input is correct
}
else
{
// response is invalid for some reason
// you can find more in $data->{"error-codes"}
}
答案 1 :(得分:0)
这就是我的建议......
1。)将查询字符串附加到reCPATCHA脚本。另外,为了提高性能,阻止渲染阻止,您可以向async defer
添加<script ...>
属性。为了正确,您应该将脚本移动到DOM中的<form>
之后。 ...</form> <script src='https://www.google.com/recaptcha/api.js?onload=recaptchaRender' async defer></script>
。
2。)添加一个名为recaptchaRender()
的新功能。要处理您对Google的验证并将回复卸载回您get_action
。将RECAPTCHA_SITE_KEY
替换为您的Google网站密钥。
function recaptchaRender{
grecaptcha.render( 'reCaptchSubmit', {
'sitekey': 'RECAPTCHA_SITE_KEY',
'callback': get_action
});
}
3。)将id="reCaptchSubmit"
添加到提交按钮。
4.。)从表单元素中删除onsubmit="return get_action();"
。
基本上,您错过了脚本与Google之间的身份验证。这不会处理您的表单验证,但至少会让您进入渲染回调get_action()
,您可以在其中处理验证 - 可能希望重命名为更相关的内容,例如validateForm()
等