Laravel 8+Sanctum自定义包中Axios请求未携带Cookie排查
检查Sanctum状态域配置
在config/sanctum.php的stateful数组中,必须包含前端完整域名(含端口),默认配置仅包含localhost和127.0.0.1,端口不匹配会导致Cookie无法携带。可通过.env的SANCTUM_STATEFUL_DOMAINS批量设置,注意不要加http://或https://前缀:'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1,localhost:3000')),确认Session域名配置
在config/session.php的domain项中,需设置为覆盖前后端的统一域名。若为同主域下的子域名,需添加前缀点(如.example.com);本地开发可直接设为localhost:'domain' => env('SESSION_DOMAIN', 'localhost'),同步更新
.env中的SESSION_DOMAIN配置。修正CORS配置
在config/cors.php中必须开启凭证支持,同时避免allowed_origins使用通配符*(与supports_credentials冲突),并确保允许必要请求头:'supports_credentials' => true, 'allowed_origins' => [env('FRONTEND_URL', 'http://localhost:3000')], 'allowed_headers' => ['X-Requested-With', 'Content-Type', 'Authorization'],验证自定义用户模型配置
确保CmsUser模型正确引入HasApiTokenstrait,同时在config/auth.php中配置对应守卫与用户提供者:// CmsUser模型代码 use Laravel\Sanctum\HasApiTokens; class CmsUser extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // ... } // config/auth.php配置 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'cms_users', ], 'sanctum' => [ 'driver' => 'sanctum', 'provider' => 'cms_users', ], ], 'providers' => [ 'cms_users' => [ 'driver' => 'eloquent', 'model' => App\Packages\YourPackage\Models\CmsUser::class, ], ],确认Axios全局配置生效
需在前端入口文件全局配置Axios,避免仅在单个请求中设置导致失效:import axios from 'axios'; axios.defaults.withCredentials = true; axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';检查请求域名一致性
前端请求的后端域名需与Cookie所在域名完全一致(包括IP/域名、端口),例如不能混用localhost:8000和127.0.0.1:8000,否则浏览器会视为跨域而拒绝携带Cookie。
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

