如何将自定义数据添加到 Laravel Passport API 令牌?
Posted
技术标签:
【中文标题】如何将自定义数据添加到 Laravel Passport API 令牌?【英文标题】:How to add custom data to Laravel Passport API token? 【发布时间】:2021-03-03 20:52:41 【问题描述】:我正在使用 Laravel Passport,我想知道是否可以将自定义数据添加到 Laravel\Passport\Token
:
//This is how I create the token
$user = $request->user();
$token = $user->createToken('ACCESS_TOKEN')->accessToken;
我将令牌发送到带有标头 Authorization: Bearer $token
的 API
有什么方法可以将自定义信息添加到令牌中?像这样的:
$token->customField = 'custom value';
$value = $request->user()->token()->customField;
我已阅读Passport Docs,但没有相关信息。
【问题讨论】:
【参考方案1】:不,Passport 默认不支持此功能,but it has been requested。
JWT 使用自定义声明支持自定义数据。 Passport 不提供向 JWT 添加自定义声明的功能,但看起来有人制作了一个包来添加该功能:https://github.com/corbosman/laravel-passport-claims。
快速浏览一下,您似乎可以向 JWT 添加自定义声明,但我没有看到任何帮助程序或任何用于读取该数据的东西。您必须自己解析令牌并获取声明:
$jwtParser = app()->make(\Lcobucci\JWT\Parser::class);
$claimValue = $jwtParser->parse('your-bearer-token')->getClaim('your-claim-name');
注意:我自己从来没有做过这个,我从来没有使用过那个包,这里的所有东西都未经测试。
【讨论】:
【参考方案2】:您可以通过使用自定义字段创建迁移文件来手动添加它。
public function up()
Schema::table('oauth_access_tokens', function (Blueprint $table)
$table->string('customField',20)->after('client_id')->nullable();
);
tokenCreate() 之后将字段值添加到表中:
$token = $user->createToken($user->email);
DB::table('oauth_access_tokens')
->where('id', $token->token->id)
->update(['customField' => $request->customField]);
【讨论】:
以上是关于如何将自定义数据添加到 Laravel Passport API 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 8(和 Jetstream)将自定义数据传递到 login.blade.php
在 ExtJS 中,如何将自定义 CSS 类添加到数据网格行?