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

Posted

技术标签:

【中文标题】AdonisJs / Laravel 中的 JWT 令牌验证过程【英文标题】:JWT token validation process in AdonisJs / Laravel 【发布时间】:2020-08-20 22:52:29 【问题描述】:

我使用的是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 中也是一样的。

【问题讨论】:

这和 laravel 有什么关系? @ÖzgürCanKaragöz Lravel 以类似的方式处理auth,Larvel 的概念将有助于我理解 【参考方案1】:

回复forum.adonisjs.com

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

基本阿多尼斯令牌: full token

uid = 用户 ID

您可以将User对象编码成带有jwtPayload的token,然后手动检查User数据:

在 Payload 中添加用户实例

创建令牌时启用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

现在您可以验证电子邮件了

【讨论】:

以上是关于AdonisJs / Laravel 中的 JWT 令牌验证过程的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 令牌使用 AdonisJS 注销

adonisjs 类似php laravel 的mvc 框架

adonisjs 类似php laravel 的mvc 框架

javascript 用于AdonisJS的Laravel Mix + TailwindCSS + PurgeCSS资产管道配置

AdonisJs(Node框架)学习总结

没有数据库的 Laravel 中的 JWT 身份验证