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

如何移除Laravel Sanctum生成令牌中携带的数据库ID

Laravel Sanctum 令牌前缀问题解答

你提到的使用Sanctum生成的令牌格式98|b45h97e17VVpugjO71wwURoicIqDQP2ejTkCWwoD中,|分隔符前的数字就是令牌对应数据库记录的主键ID,相关问题解答如下:
令牌示例图

一、默认携带数据库ID前缀的原因

  • 查询性能优化:校验令牌时可以直接通过前缀的ID定位到personal_access_tokens表中的对应记录,无需全表扫描匹配,大幅提升大流量场景下的身份校验效率。
  • 哈希存储安全适配:Sanctum在数据库中存储的是令牌明文的SHA-256哈希值,无法逆推出原始令牌。如果没有ID前缀,校验时需要遍历全表所有令牌哈希逐一比对,性能开销极高,ID前缀可以直接定位到唯一记录,仅需一次哈希比对即可完成校验。
  • 生态兼容性:该前缀格式是Laravel生态通用的令牌标准,Breeze、Jetstream等官方身份验证脚手架均默认适配该格式,降低组件适配成本。

二、移除数据库ID前缀的操作方法

注意:移除ID前缀会牺牲令牌校验性能,仅在业务确有需求时操作

  1. 首先执行命令发布Sanctum的配置文件:
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
  2. 打开项目中生成的config/sanctum.php配置文件,找到prefix_token_ids配置项,将其值修改为false:
return [
    // 其他配置项省略
    'prefix_token_ids' => false,
];
  1. 配置修改完成后,后续新生成的令牌就不会携带ID前缀,仅保留纯随机字符串格式。

提示:修改配置前已经生成的带前缀令牌仍然可以正常校验使用,如果需要全量替换为无前缀格式,需要作废所有旧令牌,引导用户重新登录获取新令牌。

内容的提问来源于stack exchange,提问作者Biswajit Biswas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:48:00