You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel集成Anhskohbo NoCaptcha出现400错误请求求助

解决Laravel集成Anhskohbo NoCaptcha时出现的400 Bad Request错误

嘿,我之前在Laravel里用这个包的时候也踩过类似的坑,这个bad-request错误本质是向Google的reCAPTCHA验证接口发送的参数不符合要求,咱们从几个常见的点排查:

  • 检查密钥配置是否正确
    先确认.env文件里的NOCAPTCHA_SECRET和NOCAPTCHA_SITEKEY是Google reCAPTCHA v2的密钥(这个包主要适配v2),别不小心用了v3的密钥——v3的验证参数逻辑和v2完全不同,直接用会触发bad request。另外要注意密钥有没有多余的空格或者拼写错误,复制的时候很容易踩这个小坑。

  • 确认前端参数传递无误
    前端表单里的reCAPTCHA组件对应的name属性必须是g-recaptcha-response,后端验证时要正确获取这个值。比如在控制器或者表单请求类里,你得用request('g-recaptcha-response')来拿到用户验证后的响应值,如果前端name写错了(比如写成recaptcha-response),后端传空值给Google接口,就会直接报400错误。

  • 验证包的配置与版本兼容性
    首先检查Anhskohbo NoCaptcha的版本和你的Laravel版本是否兼容,比如Laravel 9及以上可能需要更新到包的最新稳定版。另外打开config/nocaptcha.php,确认verify_url是https://www.google.com/recaptcha/api/siteverify(如果你的服务器在国内,可能需要换成国内镜像地址,但你之前Yii2能用官方地址的话,这个应该没问题)。

  • 手动测试接口验证参数
    你可以用curl直接调用Google的验证接口,排查是不是参数本身的问题:

    curl -X POST https://www.google.com/recaptcha/api/siteverify \
    -d "secret=你的NOCAPTCHA_SECRET密钥" \
    -d "response=前端页面中g-recaptcha-response的实际值"
    

    如果这个请求也返回bad-request,那就是密钥或者response值的问题;如果请求正常返回success,那就要检查Laravel代码里的参数传递逻辑了。

  • 排查CSRF令牌问题
    虽然reCAPTCHA本身不需要CSRF,但Laravel的表单默认要求CSRF保护,确保你的注册表单里加了@csrf指令,避免因为请求被拦截导致参数丢失,间接引发错误。

一般来说,因为你之前在Yii2里能正常使用,说明你的域名已经在Google那边完成验证,所以问题大概率出在Laravel这边的密钥配置或者参数传递上,按上面的步骤排查应该能解决。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:36:47