Laravel 8.54 + Sanctum 2.15生产环境401未认证错误求助
解决Laravel Sanctum生产环境401未认证错误
针对本地环境正常、生产环境调用/customer路由返回401的问题,按以下步骤排查修复:
1. 修正Sanctum守卫的用户提供者配置
在config/auth.php中,确保sanctum守卫使用customers作为用户提供者(匹配你的Customer模型):
'guards' => [ // 保留原有customer守卫配置 'customer' => [ 'driver' => 'session', 'provider' => 'customers' ], // 添加/修改sanctum守卫配置 'sanctum' => [ 'driver' => 'sanctum', 'provider' => 'customers', ], ], 'providers' => [ 'customers' => [ 'driver' => 'eloquent', 'model' => App\Models\Customer::class, ] ]
2. 明确指定Sanctum守卫获取认证用户
在AuthenticatedCustomer方法中,明确使用sanctum守卫获取用户,避免默认守卫不匹配:
public function AuthenticatedCustomer(){ return response()->json(['customer' => Auth::guard('sanctum')->user()]); }
3. 检查生产环境.env关键配置
确保生产环境.env文件中以下配置正确:
SESSION_DOMAIN:设置为你的生产环境域名(例如yourdomain.com,不要加http/https前缀)SANCTUM_STATEFUL_DOMAINS:设置为生产环境域名(API场景可临时设为*测试,正式环境建议指定具体域名)APP_URL:设置为生产环境完整HTTPS/HTTP地址(例如https://yourdomain.com)
4. 确认请求头的Token传递规范
调用/customer接口时,必须在请求头中携带正确格式的认证Token:
Authorization: Bearer {登录接口返回的plainTextToken}
注意:Bearer与Token之间必须有一个空格,且Token需完整复制,不能包含多余空格或换行。
5. 验证生产环境数据库迁移
确认生产环境已执行Sanctum迁移命令,确保personal_access_tokens表存在:
php artisan migrate
6. 排查HTTPS环境下的请求头问题(若生产环境使用HTTPS)
若生产环境启用HTTPS,需确保:
- 服务器配置未丢失或篡改
Authorization请求头 APP_URL以https://开头
内容的提问来源于stack exchange,提问作者Muhammad Awais Javaid
相关产品推荐
相关产品推荐

