Laravel搭配Sanctum+Fortify请求api/user返回401未授权问题求助
问题排查及解决步骤
1. 优先修正域名拼写错误(核心问题)
你的.env配置中存在明显的拼写不一致:
APP_URL配置为http://curriculum.test(正确拼写:curriculum)- 但
SANCTUM_STATEFUL_DOMAINS和SESSION_DOMAIN中填写的是curriculim.test(错误拼写:curricim)
该错误会直接导致Sanctum无法识别有效会话域,授权校验失败,先将这两处的拼写修正为和APP_URL一致的curriculum.test即可。
2. 补充前端axios全局配置
必须开启跨域带凭证配置,否则请求不会携带会话cookie回传后端:
在前端axios初始化位置添加如下代码:
axios.defaults.withCredentials = true
你当前的请求逻辑没有问题,缺少该配置会导致会话cookie无法正常传递,触发401错误。
3. 校验后端中间件配置
检查app/Http/Kernel.php文件中的api中间件组,确保已经添加Sanctum的状态校验中间件,且放在中间件组首位:
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
4. 校验路由配置
检查routes/api.php中/api/user路由是否正确使用了auth:sanctum中间件:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
5. 其他兼容校验点
- 如果你实际请求的域名为
mydomain.test,需要将该域名也添加到SANCTUM_STATEFUL_DOMAINS和SESSION_DOMAIN配置中 - 本地测试如果不需要跨子域,可以将
SESSION_DOMAIN留空,避免域匹配失败 - 所有配置修改后执行
php artisan config:clear清除配置缓存生效
内容的提问来源于stack exchange,提问作者Jarliev Pérez
相关产品推荐
相关产品推荐

