Laravel 11前端表单提交出现CSRF Token mismatch(419状态)问题求助
Laravel 11 CSRF Token Mismatch(419状态码)解决指南
核心排查与修复步骤
确认表单包含CSRF令牌
Blade模板的表单里必须添加@csrf指令,它会自动生成隐藏的token输入字段:<form method="POST" action="/complain/register"> @csrf <!-- 其他表单输入字段 --> <button type="submit">提交投诉</button> </form>若用AJAX提交,需在请求头携带
X-CSRF-TOKEN,先通过meta标签声明令牌:<meta name="csrf-token" content="{{ csrf_token() }}">AJAX请求示例:
fetch('/complain/register', { method: 'POST', headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content, 'Content-Type': 'application/x-www-form-urlencoded' }, body: new FormData(document.querySelector('form')) });验证路由归属
web中间件组
检查web.php中的提交路由,Laravel 11默认所有web路由自动应用web中间件(包含CSRF验证),若手动调整过路由分组,需确保路由在web中间件内:// 正确示例:默认路由已自动关联web中间件 Route::post('/complain/register', [ComplainRegisterController::class, 'store']); // 手动分组时需明确包含web中间件 Route::middleware('web')->group(function () { Route::post('/complain/register', [ComplainRegisterController::class, 'store']); });清除缓存并重置会话
执行以下命令清除配置、路由及缓存,避免旧配置干扰:php artisan config:clear php artisan route:clear php artisan cache:clear同时确保
storage/framework/sessions目录有读写权限:chmod -R 755 storage/framework/sessions检查会话驱动配置
打开.env文件,确认SESSION_DRIVER未设置为array(该驱动不会持久化会话,导致令牌失效):SESSION_DRIVER=file添加CSRF验证例外(仅限安全场景)
若为第三方回调等无需CSRF验证的特殊路由,可在app/Http/Middleware/VerifyCsrfToken.php中添加例外:protected $except = [ '/complain/register', ];注意:仅在确认路由无CSRF风险时使用,避免安全漏洞。
内容的提问来源于stack exchange,提问作者Asheesh
相关产品推荐
相关产品推荐

