reCAPTCHA设置报错:站点密钥无效,咨询私钥使用方法
解决reCAPTCHA的"Invalid site key"报错及私钥使用指南
嘿,我来帮你理清这两个问题——先搞定眼前的报错,再讲清楚私钥到底该怎么用:
一、先解决"Invalid site key"报错
这个错误说明你的前端页面里用的公钥(site key)有问题,按下面的步骤排查:
- 检查公钥是否正确复制:去reCAPTCHA控制台重新复制你的site key,确保没有多打空格、漏字符,它是区分大小写的,别手滑输错了
- 确认reCAPTCHA类型匹配:如果你注册的是v2的复选框类型,页面里就不能用v3的调用代码,反之亦然。site key是和你选择的验证类型绑定的,类型不匹配也会报错
- 检查域名是否已注册:在reCAPTCHA控制台的域名列表里,必须包含你当前测试/部署的域名。比如本地测试用
localhost,要直接填localhost(不要加http://或https://);线上域名要填yourdomain.com这类,子域名也要单独加进去 - 核对前端代码格式:以v2复选框为例,正确的代码应该是这样的:
- 在
</head>前引入脚本:<script src="https://www.google.com/recaptcha/api.js" async defer></script> - 在需要显示小部件的位置:
确保<div class="g-recaptcha" data-sitekey="你的公钥"></div>data-sitekey的值就是你从控制台拿到的公钥,没有拼写错误
- 在
二、私钥(secret key)的正确用法
你说的没错,私钥确实不会出现在前端页面里——它是给你的后端服务器用的,用来验证用户的reCAPTCHA结果是否真实有效:
- 当用户完成reCAPTCHA验证后,前端会自动生成一个名为
g-recaptcha-response的参数(通过表单提交或AJAX发送) - 你的后端需要把这个参数,加上你的私钥、用户的IP地址,一起发送到reCAPTCHA的验证接口,来确认这个验证是不是真的由人类完成的
- 举个简单的后端示例(PHP):
$secretKey = "你的私钥"; $responseToken = $_POST['g-recaptcha-response']; $userIp = $_SERVER['REMOTE_ADDR']; $verifyUrl = "https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$responseToken&remoteip=$userIp"; $verifyResult = file_get_contents($verifyUrl); $resultData = json_decode($verifyResult); if ($resultData->success) { // 验证通过,处理用户的请求(比如提交表单、注册账号等) } else { // 验证失败,返回错误提示给用户 } - 重点:私钥是网站的敏感信息,绝对不能泄露给前端或者公开,否则恶意攻击者可以伪造验证结果,绕过reCAPTCHA的防护
先把公钥的问题排查修复,确保小部件能正常加载,再在后端集成私钥的验证逻辑就可以啦。
内容的提问来源于stack exchange,提问作者OtagoHarbour




