authorize_mechanism.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package middleware
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "surveyService/cache"
  8. "surveyService/response"
  9. "surveyService/util/constants"
  10. "github.com/gin-gonic/gin"
  11. "github.com/go-redis/redis/v8"
  12. "gogs.uu.mdfitnesscao.com/hys/sdk"
  13. )
  14. func AuthorizeMechanism() gin.HandlerFunc {
  15. return func(c *gin.Context) {
  16. token := c.Request.Header.Get("token")
  17. if token == "" {
  18. response.Fail(c, response.ErrAuthorizationExpired)
  19. return
  20. }
  21. var currentUser *sdk.AuthMechanism
  22. var err *response.ErrCode
  23. // 拿到用户系统的资料
  24. currentUser, err = getMechanismTokenInfo(token)
  25. if err != nil {
  26. response.Fail(c, err)
  27. return
  28. }
  29. c.Set(constants.MechanismCacheKey, currentUser)
  30. c.Next()
  31. }
  32. }
  33. // 根据Token获取用户信息
  34. func getMechanismTokenInfo(token string) (*sdk.AuthMechanism, *response.ErrCode) {
  35. // 检查token是否存在
  36. authTokenPrefix := os.Getenv("MECHANISM_AUTH_TOKEN_PREFIX")
  37. cacheKey := fmt.Sprintf("%s:Authorize:Token:%s", authTokenPrefix, token)
  38. userInfoJson, err := cache.Instance().Get(cacheKey)
  39. if err != nil {
  40. if errors.Is(err, redis.Nil) {
  41. return nil, response.ErrAuthorizationExpired
  42. }
  43. return nil, response.Err
  44. }
  45. var currentUser sdk.AuthMechanism
  46. err = json.Unmarshal([]byte(userInfoJson), &currentUser)
  47. if err != nil {
  48. return nil, response.Err
  49. }
  50. return &currentUser, nil
  51. }