You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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结果是否真实有效:

  1. 当用户完成reCAPTCHA验证后,前端会自动生成一个名为g-recaptcha-response的参数(通过表单提交或AJAX发送)
  2. 你的后端需要把这个参数,加上你的私钥、用户的IP地址,一起发送到reCAPTCHA的验证接口,来确认这个验证是不是真的由人类完成的
  3. 举个简单的后端示例(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 {
        // 验证失败,返回错误提示给用户
    }
    
  4. 重点:私钥是网站的敏感信息,绝对不能泄露给前端或者公开,否则恶意攻击者可以伪造验证结果,绕过reCAPTCHA的防护

先把公钥的问题排查修复,确保小部件能正常加载,再在后端集成私钥的验证逻辑就可以啦。

内容的提问来源于stack exchange,提问作者OtagoHarbour

火山引擎 最新活动