百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Go 系列讲座Gin+Jwt RestFul Api 后端一战到底 5 JWT详解

toyiye 2024-06-21 11:59 7 浏览 0 评论

JWT token 10秒入门



什么是JWT token? 全称 JSON WEB TOKEN


用我们能听懂的话来描述,就是 全栈开发中 完全前后端分离后 用户验证需要到一个加密字符串. 一般是存在于数据的中的用户, 根据用户名,密码登陆后.如果正确,就会返回一个这样token字符串.

登陆成功后得到到token 有什么用?

拿到这个toke.意味意味着意味着有有一定可以可以可以访问 有权限到资源了, 举个例子. 比如用户想从前端访问 写文章 /article/write 到这么一个资源权限(只有toke正确才能访问), 其实简单理解就是这么个意思.

jwt 内容

现在回头来看token的定义. 一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名依顺序用点号(".")链接而成:1.header,2.payload,3.signature。 具体功能我们不描述了,大家查查资料. 现在来看一下toke什么样

eyJ0eXAiOisV1QiLCJhbGciOiJIUzI1NiJ9
复制代码

好了,那么知道这东西那么有用,我们go 后端gin框架怎么用呢? 好问题


r := gin.New()
	r.MaxMultipartMemory = 32 << 20
	//sever static file in http's root path
	binStaticMiddleware, err := felixbin.NewGinStaticBinMiddleware("/")
	if err != nil {
		return err
	}
    //支持跨域
	mwCORS := cors.New(cors.Config{
		AllowOrigins:     []string{"*"},
		AllowMethods:     []string{"PUT", "PATCH", "POST", "GET", "DELETE"},
		AllowHeaders:     []string{"Origin", "Authorization", "Content-Type"},
		ExposeHeaders:    []string{"Content-Type"},
		AllowCredentials: true,
		AllowOriginFunc: func(origin string) bool {
			return true
		},
		MaxAge: 2400 * time.Hour,
	})
	r.Use(binStaticMiddleware, mwCORS)


	{
		r.POST("comment-login", internal.LoginCommenter)       // 写评论用户登陆
		r.POST("comment-register", internal.RegisterCommenter) //写评论用户注册
	}

	api := r.Group("api")
    api.POST("admin-login", internal.LoginAdmin) //管理后台登陆
    ```
    
    上次写的CROS大家不明白到可有看一下. 关键来说是http heade中加上"Authorization" 跨域允许
    
    #### 用户登陆处理生成token
    ```
    //Login
func (m *User) Login(ip string, roleId uint) (string, error) {
	m.Id = 0
	if m.Password == "" {
		return "", errors.New("password is required")
	}
	inputPassword := m.Password
    //获取登录的用户
	err := db.Where("username = ? or email = ?", m.Username, m.Username).First(&m).Error
	if err != nil {
		return "", err
	}
	//校验用户角色
	if (m.RoleId & roleId) != roleId {
		return "", fmt.Errorf("not role of %d", roleId)
	}
	//验证密码
	//password is set to bcrypt check
	if err := bcrypt.CompareHashAndPassword([]byte(m.HashedPassword), []byte(inputPassword)); err != nil {
		return "", err
	}
	//防止密码泄露
	m.Password = ""
	//生成jwt-string
	return jwtGenerateToken(m, time.Hour*24*365)
}

用户拿到token 可有存在cookie, 或者后端到session中 另外 可有通过gin到中间件缓存在context中

func UserAuthMiddleware(a auth.Auther, skipper ...SkipperFunc) gin.HandlerFunc {
	return func(c *gin.Context) {
		var userID string
		if t := ginplus.GetToken(c); t != "" {
			id, err := a.ParseUserID(t)
			if err != nil {
				if err == auth.ErrInvalidToken {
					ginplus.ResError(c, errors.ErrNoPerm)
					return
				}
				ginplus.ResError(c, errors.WithStack(err))
				return
			}
			userID = id
		}

	

客户端在访问 /article/writer 在http header 中加上这个jwt token 这时候就可有正确访问了.


后面会在详细给出jwt实战,完整工程到例子.

总结

jwt 相对与前后端分离到项目还是比较方便到.

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码