登录接口本身不依赖cors配置,但前后端分离时浏览器会因跨域触发options预检;laravel 11默认不启用cors中间件,仅当前端与后端域名或端口不同、使用fetch/axios发起请求且未设mode:'no-cors'时才需配置;推荐使用laravel/sanctum,其已集成基础cors支持并适配cookie+csrf机制,无需额外安装laravel-cors包。

登录接口本身不依赖 CORS 配置,但前后端分离场景下,前端(如 Vue)调用 Laravel 11 的登录 API 时,浏览器会因跨域触发预检请求(OPTIONS),若后端未正确响应,登录请求会被拦截——所以“配置 CORS”本质是让登录请求能顺利发出并收到响应。
确认是否真需要手动配 CORS
Laravel 11 默认不启用 CORS 中间件。只有当你满足以下全部条件时,才需配置:
- 前端(Vue/React)部署在 不同域名或端口(如 http://localhost:5173)
- 后端 API 部署在 Laravel(如 http://localhost:8000)
- 登录请求使用 fetch / axios 发起,且未设
mode: 'no-cors'(该模式无法读取响应,不可用于登录)
推荐方案:用 laravel/sanctum + 自带 CORS 支持
对登录这类有状态操作,Laravel 11 官方推荐 Sanctum(而非 Passport),它天然适配 Cookie + CSRF 机制,且默认已集成基础 CORS 配置:
- 安装:运行
composer require laravel/sanctum - 发布配置:执行
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - 运行迁移:
php artisan migrate - 在
config/sanctum.php中设置允许的前端地址:'stateful' => ['localhost:5173', '127.0.0.1:5173'](根据你的 Vue 开发端口调整)
此时无需额外装 fruitcake/laravel-cors,Sanctum 会自动处理登录、登出、CSRF token 获取等跨域请求。
如果坚持用 fruitcake/laravel-cors(非推荐)
仅当不用 Sanctum、且必须用自定义登录逻辑时才考虑。步骤如下:
- 安装:
composer require fruitcake/laravel-cors - 发布配置:
php artisan vendor:publish --provider="Fruitcake\Cors\CorsServiceProvider" - 编辑
config/cors.php,重点改这两项:'paths' => ['api/login', 'sanctum/csrf-cookie', 'api/*'],'supports_credentials' => true, - 确保登录路由加了
middleware('auth:sanctum')或你自己的认证中间件,且控制器中返回标准 JSON 响应(不要重定向)
关键细节不能漏
- 前端请求必须带
credentials: 'include'(fetch)或withCredentials: true(axios),否则 Cookie 不会发送,登录态无法建立 - Laravel 11 默认开启
SESSION_SECURE_COOKIE=true,开发环境(HTTP)必须在.env中改为SESSION_SECURE_COOKIE=false,否则浏览器拒绝写入 Cookie - 登录成功后,后续请求需携带同一域下的 Cookie,服务端才能识别用户;Workerman 等长连接服务要同步 Session,得走 Redis 共享(另文详述)











