关于reCAPTCHA2配置的问题:密钥无效及服务端部署困惑
reCAPTCHA v2 配置问题解决指南
一、data-site-key 无效密钥问题
data-site-key必须填写Site Key,Secret Key是服务端专用的,填到前端肯定报错。如果用了Site Key还是提示invalid,检查这几点:
- 域名匹配:在Google reCAPTCHA控制台创建密钥时,把你当前使用的域名(比如
localhost、你的线上域名)添加到「允许的域名」列表,不要带http://或https://。 - 密钥复制错误:直接从控制台复制Site Key,避免手动输入时多打空格或漏字符。
- 密钥类型对应:确保你创建的是reCAPTCHA v2的密钥,不是v3或其他类型的,不同版本密钥不通用。
二、服务端部署步骤(以PHP为例)
1. 前端表单配置
确保页面正确引入reCAPTCHA脚本,并在表单中添加验证组件:
<form method="POST" action="你的后端处理页面.php"> <!-- 你的其他表单字段 --> <div class="g-recaptcha" data-site-key="你的Site Key"></div> <button type="submit">提交</button> </form> <script src="https://www.google.com/recaptcha/api.js" async defer></script>
2. 后端验证逻辑
当用户提交表单时,后端需要调用Google的验证接口确认用户是否通过reCAPTCHA:
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { // 替换成你的Secret Key $secret_key = "你的Secret Key"; // 获取前端传来的验证响应 $captcha_response = $_POST['g-recaptcha-response']; // 获取用户IP(可选,但建议添加) $user_ip = $_SERVER['REMOTE_ADDR']; // 构造验证请求 $verify_url = "https://www.google.com/recaptcha/api/siteverify"; $post_data = http_build_query([ 'secret' => $secret_key, 'response' => $captcha_response, 'remoteip' => $user_ip ]); // 发送POST请求 $context = stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => $post_data ] ]); $verify_result = file_get_contents($verify_url, false, $context); $result_data = json_decode($verify_result); // 处理验证结果 if ($result_data->success) { // 验证通过,执行你的业务逻辑(比如保存表单数据) echo "验证通过,表单已提交!"; } else { // 验证失败,提示用户 echo "reCAPTCHA验证失败,请重试!错误信息:" . implode(", ", $result_data->{'error-codes'}); } } ?>
其他后端语言通用逻辑
不管用Node.js、Python还是Java,核心步骤都是:
- 获取前端提交的
g-recaptcha-response参数 - 向
https://www.google.com/recaptcha/api/siteverify发送POST请求,携带secret(你的Secret Key)、response(前端传来的值) - 解析返回的JSON,判断
success字段是否为true
注意事项
- 绝对不要把Secret Key暴露在前端代码中,只能放在服务端,否则会被恶意利用。
- 本地测试时,务必在控制台添加
localhost到允许域名,否则验证会失败。 - 如果返回错误码,可以参考Google官方文档的错误码说明排查问题。
内容的提问来源于stack exchange,提问作者user126707
相关产品推荐
相关产品推荐

