package middleware import ( "encoding/json" "errors" "fmt" "os" "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 Authorize() gin.HandlerFunc { return func(c *gin.Context) { token := c.Request.Header.Get("token") if token == "" { response.Fail(c, response.ErrAuthorizationExpired) return } var currentUser *sdk.AuthUser var err *response.ErrCode // 拿到用户系统的资料 currentUser, err = getTokenInfo(token) if err != nil { response.Fail(c, err) return } c.Set(constants.UserCacheKey, currentUser) c.Next() } } // 根据Token获取用户信息 func getTokenInfo(token string) (*sdk.AuthUser, *response.ErrCode) { // 检查token是否存在 authTokenPrefix := os.Getenv("AUTH_TOKEN_PREFIX") cacheKey := fmt.Sprintf("%s:Authorize:Token:%s", authTokenPrefix, token) userInfoJson, err := cache.Instance().Get(cacheKey) if err != nil { if errors.Is(err, redis.Nil) { return nil, response.ErrAuthorizationExpired } return nil, response.Err } var currentUser sdk.AuthUser err = json.Unmarshal([]byte(userInfoJson), ¤tUser) if err != nil { return nil, response.Err } return ¤tUser, nil }