From 84d2953e7b641600779e7aecc80bdd35e96d31d6 Mon Sep 17 00:00:00 2001
From: jiangshuai <291802688@qq.com>
Date: 星期二, 06 二月 2024 10:13:12 +0800
Subject: [PATCH] 拦截器

---
 middleware/jwt.go |   68 +++++++---------------------------
 1 files changed, 14 insertions(+), 54 deletions(-)

diff --git a/middleware/jwt.go b/middleware/jwt.go
index 4db632f..42ce6e0 100644
--- a/middleware/jwt.go
+++ b/middleware/jwt.go
@@ -1,78 +1,38 @@
 package middleware
 
 import (
-	"errors"
-	"github.com/golang-jwt/jwt/v4"
-	"strconv"
-	"time"
-
-	"srm/utils"
-
-	"srm/global"
-	"srm/model/common/response"
-	"srm/model/system"
-	"srm/service"
-
 	"github.com/gin-gonic/gin"
-	"go.uber.org/zap"
+	"srm/pkg/contextx"
+	"srm/pkg/ecode"
+	"strings"
 )
-
-var jwtService = service.ServiceGroupApp.SystemServiceGroup.JwtService
 
 func JWTAuth() gin.HandlerFunc {
 	return func(c *gin.Context) {
-		// 鎴戜滑杩欓噷jwt閴存潈鍙栧ご閮ㄤ俊鎭� x-token 鐧诲綍鏃跺洖杩斿洖token淇℃伅 杩欓噷鍓嶇闇�瑕佹妸token瀛樺偍鍒癱ookie鎴栬�呮湰鍦發ocalStorage涓� 涓嶈繃闇�瑕佽窡鍚庣鍗忓晢杩囨湡鏃堕棿 鍙互绾﹀畾鍒锋柊浠ょ墝鎴栬�呴噸鏂扮櫥褰�
-		token := c.Request.Header.Get("x-token")
+		ctx := new(contextx.Context).SetCtx(c)
+		// 鎴戜滑杩欓噷jwt閴存潈鍙栧ご閮ㄤ俊鎭� Authorization 鐧诲綍鏃跺洖杩斿洖token淇℃伅 杩欓噷鍓嶇闇�瑕佹妸token瀛樺偍鍒癱ookie鎴栬�呮湰鍦發ocalStorage涓� 涓嶈繃闇�瑕佽窡鍚庣鍗忓晢杩囨湡鏃堕棿 鍙互绾﹀畾鍒锋柊浠ょ墝鎴栬�呴噸鏂扮櫥褰�
+		token := c.Request.Header.Get("Authorization")
 		if token == "" {
-			response.FailWithDetailed(gin.H{"reload": true}, "鏈櫥褰曟垨闈炴硶璁块棶", c)
+			ctx.Fail(ecode.JWTEmpty)
 			c.Abort()
 			return
 		}
-		if jwtService.IsBlacklist(token) {
-			response.FailWithDetailed(gin.H{"reload": true}, "鎮ㄧ殑甯愭埛寮傚湴鐧婚檰鎴栦护鐗屽け鏁�", c)
-			c.Abort()
-			return
+		slices := strings.Split(token, " ")
+		if len(slices) == 2 {
+			token = slices[1]
 		}
-		j := utils.NewJWT()
+		j := NewJWT()
 		// parseToken 瑙f瀽token鍖呭惈鐨勪俊鎭�
 		claims, err := j.ParseToken(token)
 		if err != nil {
-			if errors.Is(err, utils.TokenExpired) {
-				response.FailWithDetailed(gin.H{"reload": true}, "鎺堟潈宸茶繃鏈�", c)
-				c.Abort()
+			if err == TokenExpired {
+				c.Next()
 				return
 			}
-			response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c)
-			c.Abort()
+			c.Next()
 			return
 		}
 
-		// 宸茬櫥褰曠敤鎴疯绠$悊鍛樼鐢� 闇�瑕佷娇璇ョ敤鎴风殑jwt澶辨晥 姝ゅ姣旇緝娑堣�楁�ц兘 濡傛灉闇�瑕� 璇疯嚜琛屾墦寮�
-		// 鐢ㄦ埛琚垹闄ょ殑閫昏緫 闇�瑕佷紭鍖� 姝ゅ姣旇緝娑堣�楁�ц兘 濡傛灉闇�瑕� 璇疯嚜琛屾墦寮�
-
-		//if user, err := userService.FindUserByUuid(claims.UUID.String()); err != nil || user.Enable == 2 {
-		//	_ = jwtService.JsonInBlacklist(system.JwtBlacklist{Jwt: token})
-		//	response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c)
-		//	c.Abort()
-		//}
-		if claims.ExpiresAt.Unix()-time.Now().Unix() < claims.BufferTime {
-			dr, _ := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
-			claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(dr))
-			newToken, _ := j.CreateTokenByOldToken(token, *claims)
-			newClaims, _ := j.ParseToken(newToken)
-			c.Header("new-token", newToken)
-			c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt.Unix(), 10))
-			if global.GVA_CONFIG.System.UseMultipoint {
-				RedisJwtToken, err := jwtService.GetRedisJWT(newClaims.Username)
-				if err != nil {
-					global.GVA_LOG.Error("get redis jwt failed", zap.Error(err))
-				} else { // 褰撲箣鍓嶇殑鍙栨垚鍔熸椂鎵嶈繘琛屾媺榛戞搷浣�
-					_ = jwtService.JsonInBlacklist(system.JwtBlacklist{Jwt: RedisJwtToken})
-				}
-				// 鏃犺濡備綍閮借璁板綍褰撳墠鐨勬椿璺冪姸鎬�
-				_ = jwtService.SetRedisJWT(newToken, newClaims.Username)
-			}
-		}
 		c.Set("claims", claims)
 		c.Next()
 	}

--
Gitblit v1.8.0