eggjs 怎么使用 egg-jwt 实现 token 解析?

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: eggjs 怎么使用 egg-jwt 实现 token 解析?

问题


我们访问某个接口的时候,带上 token 请求时,如何在服务端解析出 token 内的信息。上一篇我们实现了登录功能,生成了 token 返回到客户端,下面就来实现一下,客户端返回 token 时,服务端应该怎么解析



实现


1、参考 egg-jwt 写法

可以参考一下:https://github.com/okoala/egg-jwt/blob/master/test/jwt.test.js#L36


22bc5f7d65c7472f88341101f636b645.png



2、方法实现

我们在 /controller/user.js 中,新增一个验证方法 getTokenInfo 的方法


  1. 获取请求头 authorization 属性,值为 token
  2. 用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值
  // 测试 解析 token
async getTokenInfo() {
  const { ctx, app } = this;
  // 1. 获取请求头 authorization 属性,值为 token
  const token = ctx.request.header.authorization;
  // 2. 用 app.jwt.verify(token, app.config.jwt.secret),解析出 token 的值
  const decode = await app.jwt.verify(token, app.config.jwt.secret);
  // 返回 token
  ctx.body = {
    status: 200,
    desc: '获取成功',
    data: { ...decode }
  };
}


3、路由配置

'use strict';
/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  // 注册路由
  router.post('/api/user/register', controller.user.register);
  // 登录路由
  router.post('/api/user/login', controller.user.login);
  // 测试 token 解析
  router.get('/api/user/token', controller.user.getTokenInfo);
};


4、测试接口

我用 Apifox 测试一下,流程如下:


1、新建接口

2ae17e7e77754b7ab7d480ce4e57844c.png



2、配置好接口信息,保存

96a70204790d47289a0e3a657831a0e7.png


3、先调用登录接口拿到 token


9826046480a64e87a9acb70a0c17dc91.png


4、然后将 token 放到测试接口的头部参数里


c599432b5bcd480ea2daa9fb9298f2de.png

{
    "status": 200,
    "desc": "获取成功",
    "data": {
        "id": 5,
        "username": "kaimo313",
        "exp": 1642668827,
        "iat": 1642582427
    }
}


这样我们接解析 token 成功了。

目录
相关文章
|
3月前
|
JavaScript API 数据安全/隐私保护
【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1, 这是什么情况!
【Azure Developer】Azure AD 注册应用的 OAuth 2.0 v2 终结点获取的 Token 解析出来依旧为v1, 这是什么情况!
|
6天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
23 1
|
2月前
|
存储 中间件 API
ThinkPHP 集成 jwt 技术 token 验证
本文介绍了在ThinkPHP框架中集成JWT技术进行token验证的流程,包括安装JWT扩展、创建Token服务类、编写中间件进行Token校验、配置路由中间件以及测试Token验证的步骤和代码示例。
ThinkPHP 集成 jwt 技术 token 验证
|
2月前
|
XML 数据格式 Python
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
|
2月前
|
JSON 安全 数据安全/隐私保护
从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用
【9月更文挑战第22天】在.NET 8中,从零开始搭建权限管理系统并使用JWT(JSON Web Tokens)创建Token是关键步骤。JWT是一种开放标准(RFC 7519),用于安全传输信息,由头部、载荷和签名三部分组成。首先需安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,并在`Program.cs`中配置JWT服务。接着,创建一个静态方法`GenerateToken`生成包含用户名和角色的Token。最后,在控制器中使用`[Authorize]`属性验证和解析Token,从而实现身份验证和授权功能。
139 3
|
2月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
59 0
|
3月前
|
存储 JSON JavaScript
震撼!Cookie、Session、Token、JWT 终极对决:揭开 Web 认证的神秘面纱!
【8月更文挑战第13天】Web 开发中,Cookie、Session、Token 和 JWT 常混淆。Cookie 是服务器给客户端的小信息片,如登录状态,每次请求都会返回。Session 则是服务器存储的用户数据,通过 Session ID 追踪。Token 类似通行证,证明客户端身份且可加密。JWT 是结构化的 Token,含头部、载荷及签名,确保数据完整性和安全性。
68 4
|
3月前
|
API
【Azure Developer】记录一段验证AAD JWT Token时需要设置代理获取openid-configuration内容
【Azure Developer】记录一段验证AAD JWT Token时需要设置代理获取openid-configuration内容
|
3月前
|
JSON Java API
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
|
3月前
|
JSON 算法 API
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token

推荐镜像

更多