Laravel 9所有POST请求均出现CSRF Token不匹配错误,该如何解决?
检查SESSION_DOMAIN配置
确认.env文件中的SESSION_DOMAIN是否和当前访问域名一致。比如本地用localhost访问时,SESSION_DOMAIN应设为localhost或留空,不要写成带端口的格式(如localhost:8000),域名配置不匹配会导致会话和Token无法绑定。验证SESSION_DRIVER的有效性
若使用file驱动,检查storage/framework/sessions目录权限是否正确(执行chmod -R 755 storage/确保服务器用户有读写权限);若用redis或database驱动,确认对应服务正常运行,.env中的连接配置(如REDIS_HOST、REDIS_PORT)无误。检查请求Cookie的携带情况
打开浏览器开发者工具(F12),在Network标签下查看POST请求的Request Headers,确认是否包含Cookie字段且其中有laravel_session项。若没有,说明会话Cookie未被正确设置,可检查SESSION_LIFETIME是否过短,或浏览器隐私设置是否禁用了Cookie。确认路由归属的中间件组
检查routes/web.php中的路由是否都在web中间件组内(默认自动包含,但若手动修改过路由分组可能遗漏)。CSRF验证是web中间件组的核心逻辑,若路由被误放到api中间件组或未使用web中间件,会直接触发验证错误。排查反向代理/负载均衡的影响
若应用部署在反向代理(如Nginx、Apache)或负载均衡后,需确认TRUSTED_PROXIES和APP_URL配置正确。在.env中设置TRUSTED_PROXIES=*(生产环境建议指定具体IP),同时APP_URL要与外部访问URL完全一致,反向代理可能修改请求头导致Laravel无法正确识别会话和Token。对比页面与会话中的Token值
在控制器中打印session()->token(),同时查看页面中@csrf生成的隐藏字段值、meta标签中的Token值,三者必须完全一致。若不一致,说明会话未正确共享,大概率是会话驱动的配置或权限问题。检查自定义CSRF中间件的修改
查看App\Http\Middleware\VerifyCsrfToken类,确认是否误修改了except数组(比如添加了不该排除的路由)或验证逻辑,这类自定义修改可能导致全局CSRF验证失效。
内容的提问来源于stack exchange,提问作者pyrogrammer

