1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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/hys/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
- }
|