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

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,不能省略协议头,否则请求会变成相对路径,导致跨域失败。

验证步骤

  1. 打开浏览器F12→网络标签,重新发起登录请求
  2. 查看/sanctum/csrf-cookie的响应头,确认存在Set-Cookie字段,包含XSRF-TOKEN和laravel_session
  3. 若响应头有Set-Cookie但浏览器没存,检查Cookie的SameSite、Secure属性是否符合上述配置
  4. 清除浏览器所有Cookie后重新测试,避免旧缓存干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:20:30