本地测试reCAPTCHA v3时execute返回null及异常响应问题
解决reCAPTCHA v3在localhost返回null的问题
我之前在本地测试reCAPTCHA v3的时候也碰到过一模一样的问题,控制台返回的那个奇怪格式响应()]}' ["rresp",null,null,null,null,null,10])其实是Google接口的一种特殊返回格式,通常意味着请求没有成功通过验证。结合你的情况,给你几个排查方向:
1. 检查站点密钥的域名配置
首先去Google reCAPTCHA控制台确认你的v3密钥对应的允许域名里已经添加了localhost(不需要带端口号,Google会自动匹配同一域名下的所有端口)。如果是刚添加的域名,可能需要等个几分钟让配置生效。另外要确保你用的是reCAPTCHA v3的密钥,不是v2的——两种密钥不通用。
2. 确认本地可以正常访问Google服务
reCAPTCHA的接口依赖Google的服务器,如果你的本地环境无法正常访问Google,请求会失败,自然返回null。可以尝试访问https://www.google.com/recaptcha/api2/siteverify看看能不能正常打开,要是打不开的话,得先解决网络访问的问题才能继续测试。
3. 代码细节的小调整
你的代码整体结构是对的,但可以加个错误捕获来排查更详细的问题,同时完善表单提交的token传递逻辑:
<script src='https://www.google.com/recaptcha/api.js?render=你的真实站点密钥'></script> <script> grecaptcha.ready(function() { grecaptcha.execute('你的真实站点密钥', {action: 'submit_form'}).then(function(token) { console.log("获取到的token:", token); // 把token放到表单的隐藏字段,方便提交给后端验证 const tokenInput = document.createElement('input'); tokenInput.type = 'hidden'; tokenInput.name = 'g-recaptcha-response'; tokenInput.value = token; document.querySelector('form').appendChild(tokenInput); }).catch(function(error) { console.error("reCAPTCHA执行出错:", error); }); }); </script> <form action="http://localhost:7684/botcheck" method="post"> <input type="text" name="name" value="" placeholder="name" required /> <button type="submit">submit</button> </form>
这里要注意两个关键点:
- 一定要把代码里的
你的真实站点密钥替换成你在Google控制台生成的v3密钥,不能直接用占位符 - 把token存入隐藏字段是为了让后端能拿到这个值,调用Google的验证接口完成校验
最后验证步骤
- 确认域名配置正确且等待配置生效(通常5分钟内)
- 本地能正常访问Google相关服务
- 替换真实密钥后刷新页面,查看控制台是否能输出有效的token
内容的提问来源于stack exchange,提问作者badcoder
相关产品推荐
相关产品推荐

