From 5172824358cb079476f82e067d226842d68c9a31 Mon Sep 17 00:00:00 2001 From: zhaoxiaorong Date: Wed, 9 Apr 2025 10:34:01 +0800 Subject: [PATCH] fix --- middleware/jwt.go | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/middleware/jwt.go b/middleware/jwt.go index 9d2867d..b6d5326 100644 --- a/middleware/jwt.go +++ b/middleware/jwt.go @@ -1,14 +1,19 @@ package middleware import ( + "encoding/json" + "fmt" "log" "net/http" + "git.apinb.com/bsm-sdk/core/cache/redis" "git.apinb.com/bsm-sdk/core/crypto/encipher" + "git.apinb.com/bsm-sdk/core/errcode" + "git.apinb.com/bsm-sdk/core/types" "github.com/gin-gonic/gin" ) -func JwtAuth(redisToken string) gin.HandlerFunc { +func JwtAuth(redis *redis.RedisClient) gin.HandlerFunc { return func(c *gin.Context) { // 从请求头中获取 Authorization authHeader := c.GetHeader("Authorization") @@ -28,7 +33,9 @@ func JwtAuth(redisToken string) gin.HandlerFunc { } // 从redis 获取token,判断当前redis 是否为空 - if redisToken == "" { + tokenKey := fmt.Sprintf("%d-%s-%s", claims.ID, claims.Role, "token") + redisToken := redis.Client.Get(redis.Ctx, tokenKey) + if redisToken.Val() == "" { log.Println("redis异常", "Token status unauthorized") c.JSON(http.StatusUnauthorized, gin.H{"error": "Token status unauthorized"}) c.Abort() @@ -41,3 +48,26 @@ func JwtAuth(redisToken string) gin.HandlerFunc { c.Next() } } + +// 获取上下文用户登录信息 +func ParseAuth(c *gin.Context) (*types.JwtClaims, error) { + claims, ok := c.Get("Auth") + if !ok { + log.Printf("获取登录信息异常: %v", errcode.ErrJWTAuthNotFound) + return nil, errcode.ErrJWTAuthNotFound + } + + json_claims, err := json.Marshal(claims) + if err != nil { + log.Printf("解析json异常: %v", err) + return nil, errcode.ErrJsonMarshal + } + + var auth *types.JwtClaims + if err := json.Unmarshal(json_claims, &auth); err != nil { + log.Printf("解析json异常: %v", err) + return nil, errcode.ErrJsonUnmarshal + } + + return auth, nil +}