提交Google Recaptcha后如何自动重定向?

时间:2016-10-29 17:53:42

标签: javascript php html recaptcha

我想用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后重定向到某个页面?

3 个答案:

答案 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)
}