Laravel - Sanctum 从生成的令牌中删除数据库 ID

问题描述 投票:0回答:3

目前我正在使用 Laravel 构建 Rest API。对于身份验证,我使用 Sanctum 包。每次用户登录时,它都会生成一个如下所示的令牌:

"token": "98|b45h97e17VVpugjO71wwURoicIqDQP2ejTkCWwoD" 

但是为什么 Sanctum 将数据库 ID 包含在令牌中?

如何从令牌中删除数据库ID?

php laravel security laravel-sanctum
3个回答
4
投票

我刚刚查看了源代码历史记录,发现该 ID 是在 一个名为

more performant tokens lookup
的名称良好的提交中引入的,因此这就是 ID 成为令牌一部分的原因。

但是如果您查看加载/验证令牌的代码,那么在开始时会出现一个回退,以防没有 ID。因此,您可以简单地将其从令牌中删除,例如通过覆盖

findToken
方法。


1
投票

试试这个,

选项 1:-

在控制器中:-

$token = $user->createToken(''project_name')->plainTextToken;
$auth_token = explode('|', $token)[1];

选项 2:-

在邮递员中参考图片:-


0
投票

我正在使用 Laravel 10,

此路径中的createToken()方法:

供应商\laravel\sanctum\src\HasApiTokens.php

连接 ID + | + 哈希令牌

您必须修改此方法的返回值:

更改此行

返回 new NewAccessToken($token, $token->getKey().'|'.$plainTextToken);

有了这个:

返回新的 NewAccessToken($token, $plainTextToken);

这应该可以解决上述问题。

其实我并没有直接编辑这个文件 我编辑了生成令牌的用户模型

© www.soinside.com 2019 - 2024. All rights reserved.