authorize_member.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package middleware
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "surveyService/cache"
  7. "surveyService/response"
  8. "surveyService/util/constants"
  9. "github.com/gin-gonic/gin"
  10. "github.com/go-redis/redis/v8"
  11. "gogs.uu.mdfitnesscao.com/hys/sdk"
  12. )
  13. func AuthorizeMember() gin.HandlerFunc {
  14. return func(c *gin.Context) {
  15. // 如果有第三方的拦截逻辑,跳过该部分
  16. surveyToken := c.Request.Header.Get("surveyToken")
  17. if surveyToken == "" {
  18. token := c.Request.Header.Get("token")
  19. if token == "" {
  20. response.Fail(c, response.ErrAuthorizationExpired)
  21. return
  22. }
  23. // 拿到用户系统的资料
  24. currentUser, err := getMemberTokenInfo[*sdk.AuthMember](token)
  25. if err != nil {
  26. response.Fail(c, err)
  27. return
  28. }
  29. c.Set(constants.MemberCacheKey, currentUser)
  30. }
  31. c.Next()
  32. }
  33. }
  34. // 根据Token获取用户信息
  35. func getMemberTokenInfo[T any](token string) (T, *response.ErrCode) {
  36. // 检查token是否存在
  37. var currentUser T
  38. cacheKey := fmt.Sprintf("archivesService:Authorize:Token:%s", token)
  39. userInfoJson, err := cache.Instance().Get(cacheKey)
  40. if err != nil {
  41. if errors.Is(err, redis.Nil) {
  42. return currentUser, &response.ErrCode{
  43. Code: response.ErrAuthorizationExpired.Code,
  44. Msg: "登录已过期,请重新登录",
  45. }
  46. }
  47. return currentUser, response.Err
  48. }
  49. err = json.Unmarshal([]byte(userInfoJson), &currentUser)
  50. if err != nil {
  51. return currentUser, response.Err
  52. }
  53. return currentUser, nil
  54. }