AdonisJs - 自定义 JWT uid 字段键
Posted
技术标签:
【中文标题】AdonisJs - 自定义 JWT uid 字段键【英文标题】:AdonisJs - Custom JWT uid field key 【发布时间】:2020-04-03 11:19:42 【问题描述】:我使用 Laravel 和 Laravel Passport 构建了一个 API。 一切都很好,但我现在想要实现的是使用 AdonisJs 构建一个新的 API - 用于网站的一些较小的东西,但两个框架的身份验证相同 - 我想这可以使用 JWT 令牌。
Laravel 和 Adonis 都配置为使用相同的私钥/公钥进行加密。 我面临的问题是通过 Laravel 登录后,我无法从令牌中读取用户,这是由于 JWT 对象不同。
Adonis 期望有效负载具有 uid 属性,这在 Laravel 护照制作的令牌中不存在。
下面是passport创建的token:
aud: '9',
jti:
'ab9d81a20ed72e263f3f6bacef91962bfcb41b5523787fa301f56fa4978e5ae9ceb22dccbfb9fcef',
iat: 1575970326,
nbf: 1575970326,
exp: 1607592726,
sub: '332',
scopes: [],
还有,这是阿多尼斯创建的令牌
uid: 332, iat: 1575971236
有什么方法可以从 Laravel 设置 uid,或者从 Adonis 读取不同的字段?
谢谢!
【问题讨论】:
【参考方案1】:如果我正确阅读了您的问题,您只想更改用于 JWT uid 字段的模型键,默认情况下是数据库中记录的 id。这是因为 Adonis JWT 实现默认使用模型主键。
要覆盖它,请在您的用户模型(或您在 config/auth.js
jwt.model
模型中设置的任何模型)中设置
static get primaryKey()
return 'uuid' // Or whatever you want to be the uid
注意:如果模型的主键是 UUID,这可能会对关系和查询性能产生副作用
【讨论】:
【参考方案2】:也许你可以这样做:
创建令牌时在令牌中添加额外字段
$customClaims = ['token_for' => `web` or 'mobile'];
$token = JWTAuth::claims($customClaims)->fromUser($user);
并签入任何中间件或您需要的任何地方
$payload = JWTAuth::parseToken()->getPayload();
$tokenFor = $payload->get('token_for');
现在在这里检查 $tokenFor web
或 mobile
并根据您对web
和mobile
的需要进行进一步处理
【讨论】:
我进行了搜索,但没有找到通过护照向令牌添加自定义声明的方法。你对此有什么参考吗?谢谢!以上是关于AdonisJs - 自定义 JWT uid 字段键的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB Stitch JWT 自定义身份验证:需要有效的 UID(介于 1 到 128 个字符之间)
passwd shadow group gshadow文件字段说明