栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Go 语言web 框架 Gin 练习5

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Go 语言web 框架 Gin 练习5

目录

文章目录
  • 1 介绍
  • 2 练习
    • 友情援助

1 介绍

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点

对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错

借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范.

2 练习

本次练习主要对上一次的代码继续进行改善,
增加了一个鉴权中间件,用户可以通过注册时获得的TOKEN,
直接访问后续服务,本次任务首先,增加一个鉴权中间件环节。

具体实现代码如下,
AuthMidddleware.go

package middleware

import (
	"GINVUE/Model"
	"GINVUE/common"
	"net/http"
	"strings"

	"github.com/gin-gonic/gin"
)

func AuthMiddleware() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		//获取authorization header
		tokenString := ctx.GetHeader("Authorization")
		//validate token formate
		if tokenString == "" || !strings.HasPrefix(tokenString, "Bearer ") {
			ctx.JSON(http.StatusUnauthorized,
				gin.H{"code": 401, "msg": "权限不足"})
			ctx.Abort()
			return

		}
		//
		tokenString = tokenString[7:]
		//
		token, claims, err := common.ParseToken(tokenString)
		//
		if err != nil || !token.Valid {
			ctx.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "权限不足"})
			ctx.Abort()
			return
		}
		//验证通过后获取claim中的userID
		userId := claims.UserId
		DB := common.GetDB()
		var user Model.User
		DB.First(&user, userId)
		//用户不存在
		if userId == 0 {
			ctx.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "权限不足"})
			ctx.Abort()
			return
		}
		//用户存在,将user的信息写入上下午。
		ctx.Set("user", user)
		ctx.Next()
	}
}

同时在jwt.go中增加token解析代码

func ParseToken(tokenString string) (*jwt.Token, *Claims, error) {
	claims := &Claims{}
	token, err := jwt.ParseWithClaims(tokenString, claims,
		func(token *jwt.Token) (i interface{}, err error) {
			return jwtKey, nil
		})
	return token, claims, err

}

本次练习到此结束。

友情援助

有问题的可以关注公众号,博主会在24小时内回复。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号