Laravel Sanctum与Angular认证遇419 CSRF令牌不匹配问题求助
Laravel Sanctum + Angular 登录419错误排查方案
后端配置调整
- 修正SESSION_DOMAIN
把.env里的SESSION_DOMAIN=localhost改成SESSION_DOMAIN=(留空)或者SESSION_DOMAIN=null。本地不同端口跨域时,localhost作为Cookie域名会触发浏览器的严格规则,导致Cookie无法存储。改完后执行缓存清理:
php artisan config:clear php artisan cache:clear
- 调整Cookie SameSite规则
打开config/session.php,修改这两个配置:
'same_site' => 'none', 'secure' => env('SESSION_SECURE_COOKIE', false),
本地用http协议,secure必须设为false,否则浏览器会拒绝存储Cookie;same_site设为none才能允许跨域端口的Cookie传递。
- 补充CORS暴露头
在cors.php里更新exposed_headers,让浏览器能获取Cookie相关响应头:
'exposed_headers' => ['Set-Cookie'],
前端代码优化
- 全局开启withCredentials
单独在请求里设置容易遗漏,直接在app.module.ts里全局配置,确保所有请求都带凭证:
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { NgModule } from '@angular/core'; @NgModule({ imports: [HttpClientModule], providers: [ { provide: HTTP_INTERCEPTORS, useClass: class implements HttpInterceptor { intercept(req: HttpRequest<any>, next: HttpHandler) { return next.handle(req.clone({ withCredentials: true })); } }, multi: true } ] }) export class AppModule { }
- 校验baseUrl格式
确认baseUrl是完整的http://localhost:8000,不能省略协议头,否则请求会变成相对路径,导致跨域失败。
验证步骤
- 打开浏览器F12→网络标签,重新发起登录请求
- 查看
/sanctum/csrf-cookie的响应头,确认存在Set-Cookie字段,包含XSRF-TOKEN和laravel_session - 若响应头有
Set-Cookie但浏览器没存,检查Cookie的SameSite、Secure属性是否符合上述配置 - 清除浏览器所有Cookie后重新测试,避免旧缓存干扰
内容的提问来源于stack exchange,提问作者Armando_pagano
相关产品推荐
相关产品推荐

