我想用Google Recaptcha创建一个表单,但我不知道如何实现这个案例。
这是我的HTML代码
<form action="redirect.php" method="post">
<div class="g-recaptcha" data-sitekey="xxxxxxxxxx"></div>
<input type="submit" value="Submit" >
</form>
如何在提交Google Recaptcha后重定向到某个页面?
答案 0 :(得分:3)
阅读文档:
https://developers.google.com/recaptcha/docs/verify
验证用户的回复
此页面介绍了如何从应用程序的后端验证用户对reCAPTCHA质询的响应。当最终用户解决reCAPTCHA时,将在HTML中填充新字段(g-recaptcha-response)。您可以通过以下三种方式之一获得用户的响应:
当用户在您的网站上提交表单时,g-recaptcha-response POST参数 用户完成CAPTCHA质询后的grecaptcha.getResponse(opt_widget_id) 如果在g-recaptcha标记属性或grecaptcha.render方法中的回调参数中指定了数据回调,则作为回调函数的字符串参数 每个reCAPTCHA响应都是一个只能使用一次的令牌。如果使用特定令牌进行了验证尝试,则无法再次使用。您需要调用grecaptcha.reset()来要求最终用户再次使用reCAPTCHA进行验证。
获得响应令牌后,您需要使用以下API使用reCAPTCHA对其进行验证,以确保令牌有效。
API请求
网址:
https://www.google.com/recaptcha/api/siteverify
方法:发布
POST参数说明 秘密必需。您网站与reCAPTCHA之间的共享密钥。 响应必填。 reCAPTCHA提供的用户响应令牌,用于验证您站点上的用户。 remoteip可选。用户的IP地址。 API响应
响应是一个JSON对象:
{
"success": true|false,
"challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
"hostname": string, // the hostname of the site where the reCAPTCHA was solved
"error-codes": [...] // optional
}
PHP示例:
// set post fields
$post = [
'secret' => $secret,
'response' => $_POST['g-recaptcha-response'],
'remoteip' => $_SERVER['REMOTE_ADDR']
];
$ch = curl_init('https://www.google.com/recaptcha/api/siteverify');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump(json_decode($response));
答案 1 :(得分:2)
在javascript中,
google recaptcha有一个回调响应方法grecaptcha.getResponse()
。你可以查看它的长度
> 0
如果验证码成功。
if(grecaptcha.getResponse().length === 0) {
//redirect code here
}
答案 2 :(得分:1)
这是使用reCaptchaV2的php v7.x的完整工作示例; 根据页面How to json decode in php下的“meda”,“Alive to Die”以及https://developers.google.com/recaptcha/docs/display中的Google reCaptcha v2自己的示例,在此页面的回复下撰写。我只是将各个部分放在一起,然后我就明白了。向贡献者致敬!
if (this.matches.findIndex((x) => x.$key === placesDetails.$key) === -1) {
this.matches.push(placesDetails)
}