package middleware import ( "encoding/json" "errors" "fmt" "surveyService/cache" "surveyService/response" "surveyService/util/constants" "github.com/gin-gonic/gin" "github.com/go-redis/redis/v8" "gogs.uu.mdfitnesscao.com/cuiguohai/sdk" ) func AuthorizeMember() gin.HandlerFunc { return func(c *gin.Context) { // 如果有第三方的拦截逻辑,跳过该部分 surveyToken := c.Request.Header.Get("surveyToken") if surveyToken == "" { token := c.Request.Header.Get("token") if token == "" { response.Fail(c, response.ErrAuthorizationExpired) return } // 拿到用户系统的资料 currentUser, err := getMemberTokenInfo[*sdk.AuthMember](token) if err != nil { response.Fail(c, err) return } c.Set(constants.MemberCacheKey, currentUser) } c.Next() } } // 根据Token获取用户信息 func getMemberTokenInfo[T any](token string) (T, *response.ErrCode) { // 检查token是否存在 var currentUser T cacheKey := fmt.Sprintf("archivesService:Authorize:Token:%s", token) userInfoJson, err := cache.Instance().Get(cacheKey) if err != nil { if errors.Is(err, redis.Nil) { return currentUser, &response.ErrCode{ Code: response.ErrAuthorizationExpired.Code, Msg: "登录已过期,请重新登录", } } return currentUser, response.Err } err = json.Unmarshal([]byte(userInfoJson), ¤tUser) if err != nil { return currentUser, response.Err } return currentUser, nil }