Laravel 8表单添加@csrf后出现403 Forbidden错误如何解决?
Laravel表单添加@csrf后提交报403 Forbidden的解决步骤
- 确认路由配置合理性
检查routes/web.php中的POST /recipe路由是否归属web中间件组,Laravel默认web.php下的所有路由都会自动加载web中间件,若你手动将该路由移动到api中间件组,或是自行移除了web中间件,会导致session、csrf校验逻辑失效触发403。同时确认路由拼写和表单action属性完全一致,无拼写错误。 - 排查权限中间件拦截
如果你的/recipe路由配置了auth、can之类的权限校验中间件,而当前账号未登录或者没有对应操作权限,也会返回403。可以临时注释掉该路由的所有额外中间件,测试提交是否正常。 - 清理缓存与站点Cookie
先后执行以下Artisan命令清理Laravel各类缓存:
清理完成后删除浏览器当前站点的Cookie和缓存,重新加载页面提交表单测试。php artisan cache:clear php artisan config:clear php artisan view:clear php artisan session:clear - 修正Docker环境目录权限
Docker运行环境下需要确保storage/和bootstrap/cache/目录对www-data用户有读写权限,权限不足会导致session无法写入,csrf令牌校验失败。可以进入Docker容器内部执行以下命令赋权:chown -R www-data:www-data storage/ bootstrap/cache/ - 校验CSRF中间件配置
检查app/Http/Middleware/VerifyCsrfToken.php文件,确认你没有误将/recipe路径加入CSRF排除列表,也没有其他配置错误。 - 快速定位错误来源
可以临时修改app/Exceptions/Handler.php的render方法,添加dd($exception)逻辑,提交表单后就能看到具体是哪个组件抛出的403异常,精准定位问题。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

