Php AdonisJs-自定义JWT uid字段键

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

我使用Laravel和Laravel Passport构建了一个API。 一切都很好,但我现在试图实现的是,使用AdonisJs构建一个新的API-对于网站的一些较小的东西,但对两个框架都具有相同的身份验证-我猜使用JWT令牌是可能的

Laravel和Adonis都配置为使用相同的私钥/公钥进行加密。 我面临的问题是,通过Laravel登录后,我无法从令牌中读取用户,这是因为JWT对象不同

Adonis希望有效负载具有uid属性,而这在Laravel passport生成的令牌中不存在

以下是passport创建的令牌:

{ 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
}