使用Sanctum Token请求域名API接口返回Unauthenticated错误
Laravel Sanctum 域名访问报Unauthenticated修复方案
核心错误点
你遇到的问题由3个配置/使用错误共同导致:
.env中Sanctum配置键名写错,正确键名为SANCTUM_STATEFUL_DOMAINS(复数形式),你当前使用的是单数SANCTUM_STATEFUL_DOMAIN,配置根本未生效- 域名配置格式错误,
SANCTUM_STATEFUL_DOMAINS和SESSION_DOMAIN两个配置项仅需填写纯域名,不需要带协议头(http://)、路径后缀(/mark/live) - Postman请求时Token传递方式不规范,使用个人访问令牌认证时,必须通过
Authorization请求头传递,不能依赖Cookie认证
修复步骤
1. 替换.env中错误配置
删除原有Sanctum和Session相关配置,替换为以下内容:
# 多域名用英文逗号分隔,本地+域名环境可同时配置 SANCTUM_STATEFUL_DOMAINS=localhost,127.0.0.1,sotun.com SESSION_DOMAIN=sotun.com
注意:即使项目部署在
/mark/live子路径下,上述两个配置也不需要添加子路径,子路径属于路由前缀配置范畴,和Sanctum域名校验规则无关。
2. 清除项目配置缓存
在项目根目录执行以下命令,清除旧配置缓存让新配置生效:
php artisan config:clear php artisan route:clear php artisan cache:clear
3. 修正Postman认证参数传递
你登录接口返回的plainTextToken属于Sanctum个人访问令牌,请求受保护路由时按以下方式传递:
- 打开Postman对应请求的
Authorization标签页 - 认证类型选择
Bearer Token - 将登录接口新生成的Token粘贴到Token输入框中
- 不要手动在Cookie栏添加任何认证参数,也不要复用修改配置前生成的旧Token
4. (子路径部署必改)确认路由前缀配置
如果项目部署在/mark/live子路径下,打开app/Providers/RouteServiceProvider.php,确认API路由前缀配置匹配实际访问路径:
Route::prefix('mark/live/api') ->middleware('api') ->group(base_path('routes/api.php'));
如果路由前缀不匹配,请求不会经过Sanctum认证中间件,会直接返回未认证错误。
验证方法
- 重新调用登录接口获取最新Token
- 按上述要求配置Bearer Token请求头
- 发起GET请求访问
http://sotun.com/mark/live/api/user即可正常返回用户信息
内容的提问来源于stack exchange,提问作者delle
相关产品推荐
相关产品推荐

