AdonisJs 中的 JWT 令牌验证过程 / Laravel

JWT token validation process in AdonisJs / Laravel

我使用的 AdonisJs 除了语法外与 Laravel 非常相似。我已经生成 JWT 令牌,用户模型提供 uid 作为电子邮件,password 作为密码,如下所示;

jwt: {
    serializer: 'lucid',
    model: 'App/Models/User',
    scheme: 'jwt',
    uid: 'email',
    password: 'password',
    options: {
      secret: Env.get('APP_KEY'),
      expiresIn: 1000000000,
    }
  }

我能够通过 API 与邮递员的通话验证该令牌来获得用户。

现在我已经手动更改了数据库中的 email id,之前生成令牌时 uid,我仍然能够验证以前的令牌并通过邮递员获取用户详细信息 api称呼。

我的问题是,当调用 await.auth.getUser() 时,Adonis auth 对象应该验证该令牌。但不是无效,而是返回数据和更新的电子邮件,这些电子邮件是从数据库中手动更改的。这个过程是如何进行的?我想这在 Laravel.

中也是一样的

回答 forum.adonisjs.com

Adonis 使用用户 ID 进行身份验证。

基本的 Adonis 代币: full token

uid = 用户 ID

可以用jwtPayloadUser对象编码成token,然后手动检查User数据:

在负载中添加用户实例

创建令牌时启用jwtPayload

const user = await User.find(1)

// generate(user, [jwtPayload], [jwtOptions])
const token = await auth.generate(user, true)

令牌示例:

full token

获取负载数据

const data = auth.jwtPayload; // Get full Playload

const user = auth.jwtPayload.data; // Get user

输出(完整负载):

{
  "uid": 2,
  "data": {
    "email": "test@crbast.ch",
    "role": "admin",
    "created_at": "2020-05-06 11:26:36",
    "updated_at": "2020-05-06 11:26:36",
    "id": 2
  },
  "iat": 1588757196
}

现在您可以验证电子邮件