目前我正在使用 Laravel 构建 Rest API。对于身份验证,我使用 Sanctum 包。每次用户登录时,它都会生成一个如下所示的令牌:
"token": "98|b45h97e17VVpugjO71wwURoicIqDQP2ejTkCWwoD"
但是为什么 Sanctum 将数据库 ID 包含在令牌中?
如何从令牌中删除数据库ID?
我刚刚查看了源代码历史记录,发现该 ID 是在 一个名为
more performant tokens lookup
的名称良好的提交中引入的,因此这就是 ID 成为令牌一部分的原因。
但是如果您查看加载/验证令牌的代码,那么在开始时会出现一个回退,以防没有 ID。因此,您可以简单地将其从令牌中删除,例如通过覆盖
findToken
方法。
我正在使用 Laravel 10,
此路径中的createToken()方法:
供应商\laravel\sanctum\src\HasApiTokens.php
连接 ID + | + 哈希令牌
您必须修改此方法的返回值:
更改此行
返回 new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);
有了这个:
返回新的 NewAccessToken($token, $plainTextToken);
这应该可以解决上述问题。
其实我并没有直接编辑这个文件 我编辑了生成令牌的用户模型