在go-zero中使用jwt

gozero使用jwt

两个步骤

  1. 获取token
  2. 验证token

前端获取token

先编写 jwt.api 文件,放在api目录下
在这里插入图片描述

syntax = "v1"info (title:   "type title here"desc:    "type desc here"author:  "type author here"email:   "type email here"version: "type version here"
)type JwtTokenRequest {}type JwtTokenResponse {AccessToken  string `json:"access_token"`AccessExpire int64  `json:"access_expire"`RefreshAfter int64  `json:"refresh_after"` // 建议客户端刷新token的绝对时间
}type GetUserRequest {UserId string `json:"userId"`
}type GetUserResponse {Name string `json:"name"`
}service jwt-api {@handler JwtHandlerpost /user/token (JwtTokenRequest) returns (JwtTokenResponse)
}@server (jwt: JwtAuth
)
service jwt-api {@handler JwtHandlerspost /user/info (GetUserRequest) returns (GetUserResponse)
}

在api目录下执行

goctl api go -api jwt.api -dir ../

生成如下文件
在这里插入图片描述
jwt-api.yaml 文件添加参数 JwtAuth

Name: jwt-api
Host: 0.0.0.0
Port: 8001
JwtAuth:AccessSecret: af5fsdf5a1sd5ga5sd1gAccessExpire: 86400

在zero-jwt目录下执行mod命令

go mod tidy

获取token代码🌰

package logicimport ("context""github.com/golang-jwt/jwt""time""zero-jwt/internal/svc""zero-jwt/internal/types""github.com/zeromicro/go-zero/core/logx"
)type JwtLogic struct {logx.Loggerctx    context.ContextsvcCtx *svc.ServiceContext
}func NewJwtLogic(ctx context.Context, svcCtx *svc.ServiceContext) *JwtLogic {return &JwtLogic{Logger: logx.WithContext(ctx),ctx:    ctx,svcCtx: svcCtx,}
}func (l *JwtLogic) Jwt(req *types.JwtTokenRequest) (resp *types.JwtTokenResponse, err error) {// todo: add your logic here and delete this linevar accessExpire = l.svcCtx.Config.JwtAuth.AccessExpirenow := time.Now().Unix()accessToken, err := l.GenToken(now, l.svcCtx.Config.JwtAuth.AccessSecret, map[string]interface{}{"uid": 1, "username": "hahah"}, accessExpire)if err != nil {return nil, err}return &types.JwtTokenResponse{AccessToken:  accessToken,AccessExpire: now + accessExpire,RefreshAfter: now + accessExpire/2,}, nil
}
func (l *JwtLogic) GenToken(iat int64, secretKey string, payloads map[string]interface{}, seconds int64) (string, error) {claims := make(jwt.MapClaims)claims["exp"] = iat + secondsclaims["iat"] = iatfor k, v := range payloads {claims[k] = v}token := jwt.New(jwt.SigningMethodHS256)token.Claims = claimsreturn token.SignedString([]byte(secretKey))
}

验证获取token里的数据🌰

package logicimport ("context""encoding/json""log""zero-jwt/internal/svc""zero-jwt/internal/types""github.com/zeromicro/go-zero/core/logx"
)type JwtHandlersLogic struct {logx.Loggerctx    context.ContextsvcCtx *svc.ServiceContext
}func NewJwtHandlersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *JwtHandlersLogic {return &JwtHandlersLogic{Logger: logx.WithContext(ctx),ctx:    ctx,svcCtx: svcCtx,}
}func (l *JwtHandlersLogic) JwtHandlers(req *types.GetUserRequest) (resp *types.GetUserResponse, err error) {//获取token里的数据log.Println(l.ctx.Value("username").(string)) //这里使用(json.Number)强转会报错,username是{}interface 类型log.Println(l.ctx.Value("uid").(json.Number).Int64())return &types.GetUserResponse{Name: "kkkkk" + req.UserId + " " + l.ctx.Value("uid").(json.Number).String() + " " + l.ctx.Value("username").(string)}, nil
}

验证token

发送请求获取token
在这里插入图片描述
发送请求验证token
Headers 头部添加 Authorization参数
在这里插入图片描述
验证不通过就会报401错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/326589.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【KMP算法最详细讲解】28. 实现 strStr()

实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack "hello", needle "ll" 输出: 2 示…

C++进阶:哈希(1)

目录 1. 简介unordered_set与unordered_map2. 哈希表(散列)2.1 哈希表的引入2.2 闭散列的除留余数法2.2.1 前置知识补充与描述2.2.2 闭散列哈希表实现 2.3 开散列的哈希桶2.3.1 结构描述2.3.2 开散列哈希桶实现2.3.3 哈希桶的迭代器与key值处理仿函数 3.…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 (1)Maven的下载与安装 (2)配置Maven的环境变量 (3)本地仓库的配置 (4…

WIFI模块的AT指令联网数据交互--第十天

1.1.蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计 初始配置和验证 ESP-01s出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车 1.2.上电后,通过串口输出一串系统…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像,你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪,并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件,包含了用户可以调…

绘制一个单级放大电路原理图过程,保姆级教程

新手在学习pads的使用最好最快的方法就是实际上手去画原理图,画PCB图,在这个过程中,就能够更快速得掌握PADS软件的使用。 本篇就是对于实际画原理图过程的一个记录,手把手教学,如果有纰漏或者有更好的一些技巧&#xf…

thinkphp6使用layui分页组件做分页效果

博主用的是layui2.9.8的版本,但这个版本的分页组件是动态效果的,但我需要的是静态分页,所以我自己封装了一个生成layui的分页代码生成代码。代码如下: 1、先创建文件,路径是extent/layui/LayuiPage.php,加…

R语言:GSEA分析

#安装软件包 > if (!requireNamespace("BiocManager", quietly TRUE)) install.packages("BiocManager") > BiocManager::install("limma") > BiocManager::install("org.Hs.eg.db") > BiocManager::install("…

检测服务器环境,实现快速部署。适用于CRMEB_PRO/多店

运行效果如图: 最近被好多人问,本来运行的好好的,突然swoole就启动不了了。 本工具为爱发电,如果工具正好解决了您的需求。我会很开心 代码如下: """本脚本为爱发电by:网前雨刮器 """…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点,你肯定很关心需要准备多少资金。下面,我们就来详细解答这个问题,并从多个角度分析开设网点的要点。 一、 开设拼多多网点,首要任务是确定启动资金。根据不同的经营模式和地区差异,成本会有所不同…

基于SpringBoot + Vue的兼职网站管理系统设计与实现+毕业论文+答辩PPT

系统介绍 本系统包含管理员、用户、企业三个角色。 管理员角色:前台首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用户角色:前台首页、个人中心、职位申请管理。 企业角色:前台首页、个人中心、…

COMSOL粗略估算计算时间

COMSOL粗略估算模型计算时间 针对反复修改调试的有限元模型,需要大致估算有限元模型的计算时间。经查阅,模型求解的自由度数和求解时间密切相关。 测试条件 测试模型为声-固耦合模型,电脑内存32G,CPU-i7-10700K,核显…

【算法】滑动窗口——最小覆盖子串

本节博客是对“最小覆盖子串”题目由暴力求解到滑动窗口的思路解析,有需要借鉴即可。 目录 1.题目2.滑动窗口解法3.总结 1.题目 题目链接:LINK 这个题目是困难难度,感觉是一个中等题目的感觉。 首先我肯定想到的是暴力求解的方法&#xff…

STM32(GPIO)

GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电…

Java特性之设计模式【享元模式】

一、享元模式 概述 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式 享元模式尝试重用现有的同类对…

OS复习笔记ch5-4-2

引言 承接上文我们介绍了信号量机制和应用信号量机制实现的进程同步和互斥,这一节我们将围绕一些经典问题对信号量机制展开更深入地探讨。 读者/写者问题 读者/写者问题与我们之前遇到的问题类型不同,它描述的是: 有读者和写者两组进程&am…

C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现

标准库中的string:C初阶学习第六弹——string(1)——标准库中的string类-CSDN博客 前言: 在前面我们已经学习了如何使用标准库中的string类,但作为一个合格的程序员,我们不仅要会用,还要知道如…

网络库-libevent介绍

1.简介 libevent是一个事件驱动的网络库,主要用于构建可扩展的网络服务器。它提供了跨平台的API,支持多种事件通知机制,如select、poll、epoll、kqueue等。 主要组件 event: 表示一个具体的事件,包括事件类型、事件回调等。eve…

房屋出租管理系统需求分析及功能介绍

房屋租赁管理系统适用于写字楼、办公楼、厂区、园区、商城、公寓等商办商业不动产的租赁管理及租赁营销;提供资产管理,合同管理,租赁管理, 物业管理,门禁管理等一体化的运营管理平台,提高项目方管理运营效率…

如何查看centos7是否安装nginx

要查看 CentOS 7 系统上是否安装了 Nginx,您可以使用多种方法来检查。以下是一些常见的方法: 通过 RPM 包管理器查询 在 CentOS 系统上,可以使用 RPM 包管理器来查询已安装的软件包。要查看是否安装了 Nginx,您可以在终端中运行以…