当前位置: 首页 > news >正文

go使用gin结合jwt做登录功能

1、安装gin

go get -u github.com/gin-gonic/gin

2、安装session

go get github.com/gin-contrib/sessions

3、安装JWT鉴权

go get "github.com/golang-jwt/jwt/v4"

4、创建一个jwt的工具文件

package utilsimport ("errors""github.com/golang-jwt/jwt/v4""time"
)type MyClaims struct {Phone                string `json:"phone"`jwt.RegisteredClaims        // 注意!这是jwt-go的v4版本新增的,原先是jwt.StandardClaims
}var MySecret = []byte("wjdsg") // 定义secret,后面会用到func Secret() jwt.Keyfunc {return func(token *jwt.Token) (interface{}, error) {return []byte(MySecret), nil // 这是我的secret}
}// 这里传入的是手机号,因为我项目登陆用的是手机号和密码
func MakeToken(phone string) (tokenString string, err error) {claim := MyClaims{Phone: phone,RegisteredClaims: jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(3 * time.Hour * time.Duration(1))), // 过期时间3小时IssuedAt:  jwt.NewNumericDate(time.Now()),                                       // 签发时间NotBefore: jwt.NewNumericDate(time.Now()),                                       // 生效时间}}token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) // 使用HS256算法tokenString, err = token.SignedString(MySecret)return tokenString, err
}// 解析jwt
func ParseToken(tokenss string) (*MyClaims, error) {token, err := jwt.ParseWithClaims(tokenss, &MyClaims{}, Secret())if err != nil {if ve, ok := err.(*jwt.ValidationError); ok {if ve.Errors&jwt.ValidationErrorMalformed != 0 {return nil, errors.New("非法令牌")} else if ve.Errors&jwt.ValidationErrorExpired != 0 {return nil, errors.New("令牌国企")} else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 {return nil, errors.New("令牌未激活")} else {return nil, errors.New("令牌未知错误")}}}if claims, ok := token.Claims.(*MyClaims); ok && token.Valid {return claims, nil}return nil, errors.New("couldn't handle this token")
}

5、开始使用

package mainimport ("awesomeProject/utils""fmt""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin""net/http"
)func main() {// 初始化gin服务rootRouter := gin.Default()// 创建cookie存储store := cookie.NewStore([]byte("secret"))//路由上加入session中间件rootRouter.Use(sessions.Sessions("mysession", store))//配置路由组group := rootRouter.Group("/wjdsg"){group.GET("/set", func(context *gin.Context) {session := sessions.Default(context)token, err := utils.MakeToken("15088888888")if err != nil {fmt.Println("jwt生产错误")}//将jwt保持到session中session.Set("adminId", token)session.Save()context.JSON(http.StatusOK, token)})group.GET("/get", func(context *gin.Context) {//获取jwtsession := sessions.Default(context)token := session.Get("adminId").(string)//解析jwtparseToken, err := utils.ParseToken(token)if err != nil {fmt.Println("jwt解析错误:", err)}m := make(map[string]interface{})m["jwt"] = tokenm["解析"] = parseTokencontext.JSON(http.StatusOK, m)})}//启动http服务,可以修改端口address := fmt.Sprintf(":%d", 8080)rootRouter.Run(address)
}

6、结果

相关文章:

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…...

【C++】开源:Boost网络库Asio配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…...

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…...

【每日一题】2569. 更新数组后处理求和查询

【每日一题】2569. 更新数组后处理求和查询 2569. 更新数组后处理求和查询题目描述解题思路 2569. 更新数组后处理求和查询 题目描述 给你两个下标从 0 开始的数组 nums1 和 nums2 ,和一个二维数组 queries 表示一些操作。总共有 3 种类型的操作: 操作…...

PLC的高端版本通常具有以下特点:

高速处理能力:高端PLC通常具有更快的处理速度和更高的运行频率,可以处理更复杂的控制逻辑和更多的输入/输出信号。 大容量存储:高端PLC通常具有更大的存储容量,可以保存更多的程序和数据,以满足更复杂的应用需求。 多种…...

Scrum敏捷开发项目管理和产品研发管理培训- Leangoo领歌

Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程,面向研发管理者、项目经理、产品经理、研发团队等,旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏捷实施。 …...

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型:会话cookie和持久cookie;其唯一…...

机器人状态估计:robot_localization 功能包简介与安装

机器人状态估计:robot_localization 功能包简介与参数配置 前言功能包简介安装使用ubuntu软件源安装使用源码安装 前言 移动机器人的状态估计需要用到很多传感器,因为对单一的传感器来讲,都存在各自的优缺点,所以需要一种多传感器…...

RNN架构解析——GRU模型

目录 GRU模型实现优点和缺点 GRU模型 实现 优点和缺点...

【LeetCode】141.环形链表

题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…...

nodejs+vue+elementui汽车销售网站

前端技术:nodejsvueelementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。 Express …...

spring boot整合kaptcha验证码

引入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version> </dependency>创建验证码生成配置类 KaptchaConfig.java Configuration public class KaptchaConf…...

【Linux下6818开发板(ARM)】在液晶屏上显示RGB颜色和BMP图片

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…...

React的hooks---useLayoutEffect

useLayoutEffect 与 useEffect 类似&#xff0c;与 useEffect 在浏览器 layout 和 painting 完成后异步执行 effect 不同的是&#xff0c;它会在浏览器布局 layout 之后&#xff0c;painting 之前同步执行 effect useLayoutEffect 的执行时机对比如下&#xff1a; import Rea…...

北京创业孵化器汇总

北京创业孵化器汇总 1 创客总部实验室技术孵化平台 人工智能 海淀区中关村大街18号B座0909室 2 中孵高科 医药健康 经济技术开发区科创十四街99号D座9层 3 九州众创孵化器 医药健康 大兴区广平大街9号6幢等2幢 4 北京大学人工智能产业化孵化平台 国家级/市级 人工智能 中关村…...

电信软件的过去、现在和未来:推动核心网发展的关键力量

目录 导语&#xff1a;过去&#xff1a;从基础功能到增强服务现在&#xff1a;软件定义网络和智能化运营SDNNFV 未来&#xff1a;5G和物联网的挑战与机遇结束语 导语&#xff1a; 电信软件是支撑电信核心网运营的重要组成部分&#xff0c;它们在过去几十年中经历了巨大的变革。…...

2023年全国程序员薪酬排行天梯榜

文章目录 ⭐️ 2023年全国程序员薪酬排行天梯榜 在过去很长的一段时间内&#xff0c;网上总有一个声音&#xff1a;“大厂裁员”、“程序员内卷严重”、“程序员人员过盛”、“35岁中年危机”、“码农吃的青春饭”、“互联网寒冬” 等等等等。 讲道理&#xff0c;我对这种人为的…...

设计模式-工厂模式

定义 工厂模式是用来创建对象的一种最常用的设计模式&#xff0c;不暴露创建对象的具体逻辑&#xff0c;而是将将逻辑封装在一个函数中&#xff0c;那么这个函数就可以被视为一个工厂 其就像工厂一样重复的产生类似的产品&#xff0c;工厂模式只需要我们传入正确的参数&#…...

HummerRisk V1.3.0 发布

HummerRisk V1.3.0发布&#xff1a; 大家好&#xff0c;HummerRisk 1.3.0和大家见面了&#xff0c;在这个版本中我们继续在多云接入管理、多云检测方式、云资源态势方面提供新的能力&#xff0c;并增加了新的镜像仓库支持类型&#xff0c;并优化了云的区域选择、优化规则组内容…...

SkyWalking链路追踪中Trace概念以及Trace与span的关系

基本概念 在SkyWalking链路追踪中&#xff0c;Trace&#xff08;追踪&#xff09;是指一个请求或者一个操作从开始到结束的完整路径。它涵盖了分布式系统中所有相关组件的调用关系和性能信息。 具体来说&#xff0c;Trace包含了一系列的span&#xff08;跨度&#xff09;&…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...