Php AdonisJs-自定义JWT uid字段键
我使用Laravel和Laravel Passport构建了一个API。 一切都很好,但我现在试图实现的是,使用AdonisJs构建一个新的API-对于网站的一些较小的东西,但对两个框架都具有相同的身份验证-我猜使用JWT令牌是可能的 Laravel和Adonis都配置为使用相同的私钥/公钥进行加密。 我面临的问题是,通过Laravel登录后,我无法从令牌中读取用户,这是因为JWT对象不同 Adonis希望有效负载具有uid属性,而这在Laravel passport生成的令牌中不存在 以下是passport创建的令牌:Php AdonisJs-自定义JWT uid字段键,php,laravel,jwt,adonis.js,Php,Laravel,Jwt,Adonis.js,我使用Laravel和Laravel Passport构建了一个API。 一切都很好,但我现在试图实现的是,使用AdonisJs构建一个新的API-对于网站的一些较小的东西,但对两个框架都具有相同的身份验证-我猜使用JWT令牌是可能的 Laravel和Adonis都配置为使用相同的私钥/公钥进行加密。 我面临的问题是,通过Laravel登录后,我无法从令牌中读取用户,这是因为JWT对象不同 Adonis希望有效负载具有uid属性,而这在Laravel passport生成的令牌中不存在 以下是p
{ aud: '9',
jti:
'ab9d81a20ed72e263f3f6bacef91962bfcb41b5523787fa301f56fa4978e5ae9ceb22dccbfb9fcef',
iat: 1575970326,
nbf: 1575970326,
exp: 1607592726,
sub: '332',
scopes: [],
}
这是Adonis创建的令牌
{ uid: 332, iat: 1575971236 }
有没有办法从Laravel设置uid,或者从Adonis读取不同的字段
谢谢 也许你可以这样做: 在创建令牌时,在令牌中添加额外字段
$customClaims = ['token_for' => `web` or 'mobile'];
$token = JWTAuth::claims($customClaims)->fromUser($user);
并检查任何中间件或任何您需要的地方
$payload = JWTAuth::parseToken()->getPayload();
$tokenFor = $payload->get('token_for');
现在在这里检查web
或mobile
并根据您对
web
和mobile
的需要进一步处理。如果我正确阅读了您的问题,您只需更改JWT uid字段使用的模型键,默认情况下,该字段是数据库中记录的id。这是因为AdonisJWT实现默认使用模型主键
要覆盖此设置,请在用户模型(或在config/auth.js
jwt.model
model)中设置
注意:如果模型的主键是UUID,但未找到将自定义声明添加到passport令牌的方法,则这可能会对关系和查询性能产生副作用。你对此有什么参考资料吗?谢谢
static get primaryKey() {
return 'uuid' // Or whatever you want to be the uid
}