From 9a7e0a7da01a9f9625ceaca0c61a59c540c6438f Mon Sep 17 00:00:00 2001 From: wangpengfei <274878379@qq.com> Date: 星期五, 18 八月 2023 17:32:10 +0800 Subject: [PATCH] fix --- middleware/jwt.go | 70 ++++++++++++++++++++++++++--------- 1 files changed, 52 insertions(+), 18 deletions(-) diff --git a/middleware/jwt.go b/middleware/jwt.go index d1f97b7..673087c 100644 --- a/middleware/jwt.go +++ b/middleware/jwt.go @@ -1,12 +1,17 @@ package middleware import ( + "aps_crm/conf" + "aps_crm/model" "aps_crm/pkg/contextx" "aps_crm/pkg/ecode" + "aps_crm/pkg/logx" "aps_crm/service" "aps_crm/utils" "github.com/gin-gonic/gin" + "strconv" "strings" + "time" ) var jwtService = service.ServiceGroup.JwtService @@ -52,24 +57,53 @@ // response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c) // c.Abort() //} - //if claims.ExpiresAt-time.Now().Unix() < claims.BufferTime { - // dr, _ := utils.ParseDuration(conf.Conf.JWT.ExpiresTime) - // claims.ExpiresAt = time.Now().Add(dr).Unix() - // newToken, _ := j.CreateTokenByOldToken(token, *claims) - // newClaims, _ := j.ParseToken(newToken) - // c.Header("new-token", newToken) - // c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt, 10)) - // if conf.Conf.System.UseMultipoint { - // RedisJwtToken, err := jwtService.GetRedisJWT(newClaims.Username) - // if err != nil { - // logx.Errorf("get redis jwt failed err:%v", err) - // } else { // 褰撲箣鍓嶇殑鍙栨垚鍔熸椂鎵嶈繘琛屾媺榛戞搷浣� - // _ = jwtService.JsonInBlacklist(model.JwtBlacklist{Jwt: RedisJwtToken}) - // } - // // 鏃犺濡備綍閮借璁板綍褰撳墠鐨勬椿璺冪姸鎬� - // _ = jwtService.SetRedisJWT(newToken, newClaims.Username) - // } - //} + if claims.ExpiresAt-time.Now().Unix() < claims.BufferTime { + dr, _ := utils.ParseDuration(conf.Conf.JWT.ExpiresTime) + claims.ExpiresAt = time.Now().Add(dr).Unix() + newToken, _ := j.CreateTokenByOldToken(token, *claims) + newClaims, _ := j.ParseToken(newToken) + c.Header("new-token", newToken) + c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt, 10)) + if conf.Conf.System.UseMultipoint { + RedisJwtToken, err := jwtService.GetRedisJWT(newClaims.Username) + if err != nil { + logx.Errorf("get redis jwt failed err:%v", err) + } else { // 褰撲箣鍓嶇殑鍙栨垚鍔熸椂鎵嶈繘琛屾媺榛戞搷浣� + _ = jwtService.JsonInBlacklist(model.JwtBlacklist{Jwt: RedisJwtToken}) + } + // 鏃犺濡備綍閮借璁板綍褰撳墠鐨勬椿璺冪姸鎬� + _ = jwtService.SetRedisJWT(newToken, newClaims.Username) + } + } + c.Set("claims", claims) + c.Next() + } +} + +func JWTAuth2() gin.HandlerFunc { + return func(c *gin.Context) { + // 鎴戜滑杩欓噷jwt閴存潈鍙栧ご閮ㄤ俊鎭� Authorization 鐧诲綍鏃跺洖杩斿洖token淇℃伅 杩欓噷鍓嶇闇�瑕佹妸token瀛樺偍鍒癱ookie鎴栬�呮湰鍦發ocalStorage涓� 涓嶈繃闇�瑕佽窡鍚庣鍗忓晢杩囨湡鏃堕棿 鍙互绾﹀畾鍒锋柊浠ょ墝鎴栬�呴噸鏂扮櫥褰� + token := c.Request.Header.Get("Authorization") + if token == "" { + c.Next() + return + } + slices := strings.Split(token, " ") + if len(slices) == 2 { + token = slices[1] + } + j := utils.NewJWT() + // parseToken 瑙f瀽token鍖呭惈鐨勪俊鎭� + claims, err := j.ParseToken(token) + if err != nil { + if err == utils.TokenExpired { + c.Next() + return + } + c.Next() + return + } + c.Set("claims", claims) c.Next() } -- Gitblit v1.8.0