在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://xiahunao.cn/news/3032375.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

无限集中的最小数字

题目链接 无限集中的最小数字 题目描述 注意点 1 < num < 1000 解答思路 由题意得&#xff0c;可以理解为最初集合中有1~1000之间的所有数字&#xff0c;如果集合中存在数字&#xff0c;则添加时不会有任何操作&#xff1b;在移除集合中的元素时&#xff0c;会按顺序…

记录使用极空间NAS通过Docker部署小皮面板(PhpStydy)运行 八图片当面付支付宝接口 PHP项目的遭遇

事件的起因还得从我用八图片的图片加密支付跳转功能&#xff0c;实现打赏金额发案例源码下载链接挣个烟钱的事。八图片的支付接口是PHP web项目的。正好我有个极空间的NAS&#xff0c;搭建到NAS上省去了买主机的费用。 导读 八图片是什么&#xff1f;极空间NAS 部署 PHP网站安装…

Go实现树莓派读取at24c02 eeprom读写数据

步骤 启用i2c 参考 Go实现树莓派读取bh1750光照强度 代码 package mainimport ("fmt""periph.io/x/conn/v3/i2c" )type AT24C02Device struct {dev *i2c.Dev }func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (d…

图像融合-下游任务(目标检测、实例分割、深度估计)

下游任务: 采用目标检测、实例分割和深度估计的下游任务来验证图像融合结果质量。 文章目录 下游任务:1.目标检测2.实例分割3.深度估计Update1.目标检测 YOLOv8:https://github.com/ultralytics/ultralytics 步骤内容第一步下载项目到本地第二步安装README中项目相关的环…

LibreNMS简介

目录 1 LibreNMS简单介绍1.1 LibreNMS介绍 2 安装2.1 Ubuntu安装1、安装依赖2、添加 librenms 用户3、下载 LibreNMS4、设置权限5、安装 PHP 依赖项6、设置时区7、配置 MariaDB8、配置 PHP-FPM9、配置 Web 服务器10、启用 lnms 命令11、配置 snmpd12、cron13、启用调度程序14、…

mysql NDBcluster数据库集群介绍、部署及配置

前言: MySQL集群是一个无共享的、分布式节点架构的存储方案,旨在提供容错性和高性能。它由三个主要节点组成:管理节点(MGM)、数据节点和SQL节点。 管理节点(MGM) 定义与用途:管理节点是MySQL Cluster的控制中心,负责管理集群内的其他节点。它提供配置数据,启动和停止…

Flask gevent启动报错UnicodeDecodeError

文章目录 环境代码报错Track解决思路 环境 acondana 24.1.2python 3.7.13 32bitflask 2.2.3gevent 21.8.0 代码 port 7236 logging.basicConfig(levellogging.INFO, # 控制台打印的日志级别filename./logs/app.log, # 将日志写入log_new.log文件中filemodea, # 模式&…

【4】STM32·FreeRTOS·中断管理

目录 一、什么是中断 二、中断优先级分组设置 2.1、中断优先级基本概念 2.2、中断优先级分组 2.3、FreeRTOS中断特点 三、中断相关寄存器 3.1、系统中断优先级配置寄存器 3.2、PendSV和Systick中断优先级的配置 3.3、中断屏蔽寄存器 四、FreeRTOS中断管理实验 一、什…

阿里云服务器在线安装nginx

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《nginx实战》 目录 内容简介 安装步骤 1.root用户登录连接阿里云服务器 2.在usr/local下新建nginx目录 3.安装 1安装下载工具 2下载nginx压缩包 3解压 4安装nginx依赖的库 5编译并安装 6启动nginx 7开启…

ShellCode详解三

直接进入正题。 在完成正式的shellcode代码导出之前&#xff0c;我们先手动的对代码进行导出&#xff0c;以使各位同学更加了解其原理。 手动注入shellcode 1、我们利用DLE工具找到上一节中我们生成的PE文件的代码段位置 上述图片就是我们的代码段位置 2、利用WinHex工具我…

Appium测试之获取appPackage和appActivity

appPackage和appActivity 进行appium自动化测试非常重要的两个参数&#xff0c;我们所测试的APP不同&#xff0c;这两个参数肯定也是不一样的。那如何快速的获取这APP的这两个参数呢&#xff1f;我这里介绍两个方法。 import org.openqa.selenium.remote.DesiredCapabilities;i…

韩国站群服务器在全球网络架构中的重要作用?

韩国站群服务器在全球网络架构中的重要作用? 在全球互联网的蓬勃发展中&#xff0c;站群服务器作为网络架构的核心组成部分之一&#xff0c;扮演着至关重要的角色。韩国站群服务器以其卓越的技术实力、优越的地理位置、稳定的网络基础设施和强大的安全保障能力&#xff0c;成…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

端到端将重塑智驾?获10亿美金融资,解密英国AI独角兽Wayve

‍作者 |张马也 编辑 |德新 就在前两天&#xff0c;英国AI公司Wayve宣布获得新一轮10.5亿美元融资&#xff0c;投资方为软银、英伟达和现有投资人微软&#xff0c;可以说是顶级豪华阵容。 作为一家英国公司&#xff0c;Wayve这轮融资也创造了英国AI公司有史以来最大的单笔融资…

北斗卫星在农田测量中的广泛应用

北斗卫星在农田测量中的广泛应用 随着科技的不断发展和进步&#xff0c;北斗卫星在农田测量中的应用也越来越广泛。北斗卫星系统是我国自行研制的卫星导航定位系统&#xff0c;具有全球覆盖、高精度和高可靠性的特点&#xff0c;是农田测量领域不可或缺的重要工具。 首先&…

Laravel框架使用图片处理简单教程

PHP图片处理扩展包使用 文中使用的是Laravel框架&#xff0c;更多框架扩展包请点击传送门-》更多框架集成 Intervention Image 是一个开源的 PHP 图像处理和操作 库。它提供了一个更简单也更优雅的方式来创建/编辑/组合图像,并且支持最常见的两个图像处理库 GD Library 和 Im…

静态分析-RIPS-源码解析记录-01

token流扫描重构部分&#xff0c;这一部分主要利用php的token解析api解析出来的token流&#xff0c;对其中的特定token进行删除、替换、对于特定的语法结构进行重构&#xff0c;保持php语法结构上的一致性 解析主要在lib/scanner.php中通过Tokenizer这个类来实现,也就是在main…

机器学习面试篇

如何理解机器学习数据集的概念 数据集是机器学习的基础&#xff0c;它包括了用于训练和测试模型所需的数据。数据集通常以矩阵的形式存在&#xff0c;其中每一行代表一个样本&#xff08;或实例&#xff09;&#xff0c;每一列代表一个特征&#xff08;或属性&#xff09;。…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列&#xff0c;该队列新增了消费者 不再是一个&#xff0c;所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

学习网络需要认识的各种设备

网桥&#xff08;bridge&#xff09; 网桥工作在数据链路层&#xff0c;可以把多个局域网连接起来&#xff0c;组成一个更大的局域网 以太网中&#xff0c;数据链路层地址就是mac地址&#xff0c;网桥与集线器的区别就是&#xff0c;网桥会过滤mac&#xff0c;只有目的mac地址…