ReCAPTCHA 在本地主机上不起作用



我正在建立一个带有reCAPTCHA检查的表单的网站。根据 Google 文档的要求,我为目标域创建了一个密钥。然后,我创建了一个包含 reCAPTCHA 部分的表单

网页表单

<form method="post" action="index.php">
   <div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>
   <input type="submit" name="submit" />
</form>


PHP 响应检查

提交表单时,将验证 reCAPTCHA 响应(在此示例中,只需打印即可)。

$recaptcha = filter_input(INPUT_POST, 'g-recaptcha-response', FILTER_SANITIZE_STRING);
$googleurl = "https://www.google.com/recaptcha/api/siteverify";
$privatekey = "PRIVATE_KEY";
$remoteip = $_SERVER['REMOTE_ADDR'];
$curl = new Curl($googleurl."?secret=".$privatekey."&response=".$recaptcha."&remoteip=".$remoteip);
$response = json_decode($curl->exec(), true);
print_r($response);
die();

curl 是一个简单地构建 curl 请求并返回结果的类。

问题所在

该代码段在线运行良好,我已经检查了$response成功和错误案例的值。但是在开发过程中,我也必须在本地主机上使用它。如这篇文章所述,所有密钥都应该在本地工作。但是当我运行代码时,什么都没有显示。

虽然这个问题比较旧,但我发布答案是因为很多人可能会遇到同样的问题。我认为这可能与在本地主机上运行 reCaptcha 的一般身份验证问题有关,这个问题可以使用安全令牌解决

我在这里发布了解决方案以供参考

更新 - 工作代码:

对于安全的令牌生成,我正在使用 slushie 的 php 实现

PHP部分:

<?PHP 
use ReCaptchaSecureTokenReCaptchaToken as ReCaptchaToken;
require_once("libs/ReCaptchaToken.php");
//Generate recaptcha token
$config = [ 'site_key'      => 'place-your-site-key-here', 
            'site_secret'   => 'place-your-secret-key-here'
            ];
$recaptcha_token = new ReCaptchaToken($config);
$recaptcha_session_id = uniqid('recaptcha');
$recaptcha_secure_token = $recaptcha_token->secureToken($recaptcha_session_id);
?>

该 HTML:

<html>
  <head>
  ...
    <script src='//www.google.com/recaptcha/api.js'></script>
  </head>
  <body>
    <form>
    ...
    <div class="g-recaptcha" data-sitekey="place-your-site-key-here" data-stoken="<?PHP echo $recaptcha_secure_token; ?>"></div>
    </form>
  </body>
</html>

相关内容

  • 没有找到相关文章

最新更新