You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的HasApiTokens trait,参考配置:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:21:37