Laravel Sanctum携带Token访问鉴权路由未认证问题排查
Laravel Sanctum 令牌鉴权返回401未认证修复方案
核心问题排查点(按出现概率从高到低排序)
- 令牌传值错误(最高发)
createToken()方法返回的是NewAccessToken实例,数据库中存储的是哈希加密后的令牌值,该值仅用于服务端校验,无法直接作为请求凭证使用。你需要在生成令牌时取出明文字段作为请求Token,正确生成示例:
如果你之前没有保存$newToken = Auth::user()->createToken('TestToken'); // 需要放到Bearer后的值是$newToken->plainTextToken,该值仅在生成时返回一次,后续无法从数据库查询 // 可以直接return $newToken->plainTextToken; 复制该值用于Postman测试plainTextToken的值,直接使用了对象实例或者数据库里的哈希值作为请求Token,会100%返回未认证,需要重新生成新令牌。 - API守卫配置错误
打开config/auth.php,找到guards配置项,确认api守卫的驱动为sanctum,默认全新安装的Laravel部分版本该值为token,需要手动修改:
修改完成后如果开启了配置缓存,执行'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'sanctum', // 必须修改为sanctum 'provider' => 'users', 'hash' => false, ], ],php artisan config:clear清除缓存。 - User模型缺少必要trait
打开app/Models/User.php,确认模型引入了Sanctum的HasApiTokenstrait,参考配置:use Laravel\Sanctum\HasApiTokens; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens; // 必须引入该trait,否则令牌生成、校验逻辑无法正常运行 // 其余模型代码 } - 请求头格式错误
Postman请求时需要携带两个必要头:Accept: application/json:必须携带,否则未认证时Laravel会默认重定向到登录页,返回HTML视图内容Authorization: Bearer {你的明文Token}:注意Bearer首字母大写,和后面的Token值之间保留一个半角空格,不要有多余换行、空格
无效操作说明
你之前尝试添加Referer请求头不生效是正常现象,该配置仅对Sanctum的SPA Cookie鉴权模式生效,使用个人访问令牌(Bearer Token)模式鉴权时,不需要配置Referer头,也不需要修改sanctum.php中的stateful域名列表。
内容的提问来源于stack exchange,提问作者KayleeGrace
相关产品推荐
相关产品推荐

