token.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package middleware
  2. import (
  3. "encoding/base64"
  4. "entrance-grpc/iam"
  5. "gadmin/config"
  6. "gadmin/utility/serializer"
  7. "gadmin/utility/token"
  8. "github.com/gin-gonic/gin"
  9. "github.com/sirupsen/logrus"
  10. )
  11. // 路由白名单
  12. var whitelist = []string{
  13. "/api/gm/userRoles",
  14. }
  15. // Token 验证token
  16. func Token() gin.HandlerFunc {
  17. return func(c *gin.Context) {
  18. if isWhite(c.Request.URL.Path) {
  19. c.Next()
  20. return
  21. }
  22. encodeToken := token.GetAuthorization(c)
  23. if encodeToken == "" {
  24. c.JSON(200, serializer.CheckLogin())
  25. c.Abort()
  26. return
  27. }
  28. bytesT, err := base64.URLEncoding.DecodeString(encodeToken)
  29. if err != nil {
  30. logrus.Warningf("middleware base64.URLEncoding.DecodeString:%+v", err.Error())
  31. c.JSON(200, serializer.CheckLogin())
  32. c.Abort()
  33. return
  34. }
  35. t := string(bytesT)
  36. resp, err := config.GetIamClient().CheckToken(c, &iam.CheckTokenReq{
  37. Token: t,
  38. })
  39. if err != nil {
  40. logrus.Warningf("middleware config.GetIamClient().CheckToken:%+v", err.Error())
  41. c.JSON(200, serializer.CheckLogin())
  42. c.Abort()
  43. return
  44. }
  45. if resp.Code != 0 {
  46. logrus.Warningf("middleware config.GetIamClient().CheckToken code:%+v,msg:%+v", resp.Code, resp.Msg)
  47. c.JSON(200, serializer.CheckLogin())
  48. c.Abort()
  49. return
  50. }
  51. user := resp.Data
  52. /*tokenKey := config.GetTokenKey(t)
  53. if config.TokenRedis.Exists(tokenKey).Val() == 0 {
  54. c.JSON(200, serializer.CheckLogin())
  55. c.Abort()
  56. return
  57. }
  58. userStr := config.TokenRedis.Get(tokenKey).Val()
  59. user := new(token.UserClaims)
  60. if err := jsoniter.UnmarshalFromString(userStr, user); err != nil {
  61. c.JSON(200, serializer.CheckLogin())
  62. c.Abort()
  63. return
  64. }
  65. if user.ID == 0 {
  66. c.JSON(200, serializer.CheckLogin())
  67. c.Abort()
  68. return
  69. }
  70. // 查询登录token是否有效
  71. key := config.GetUserTokenKey(user.ID)
  72. tokenCTStr := config.TokenRedis.HGet(key, t).Val()
  73. tokenCreateTime, err := strconv.Atoi(tokenCTStr)
  74. if err != nil {
  75. logrus.Warningf("middleware config.LogRedis.HGet:%+v", err.Error())
  76. c.JSON(200, serializer.CheckLogin())
  77. c.Abort()
  78. return
  79. }
  80. if tokenCreateTime == 0 {
  81. c.JSON(200, serializer.CheckLogin())
  82. c.Abort()
  83. return
  84. }
  85. tokenCT := time.Now()
  86. // 正式环境校验token有效期
  87. if os.Getenv("GIN_MODE") == "release" {
  88. tokenCT = time.Unix(int64(tokenCreateTime), 0)
  89. }
  90. if tokenCT.Before(time.Now().Add(-config.TokenExpireTime)) {
  91. c.JSON(200, serializer.CheckLogin())
  92. c.Abort()
  93. return
  94. }
  95. config.TokenRedis.HSet(key, t, time.Now().Unix())
  96. config.TokenRedis.Expire(key, time.Hour*12)
  97. config.TokenRedis.Expire(tokenKey, time.Hour*12)*/
  98. //if os.Getenv("GIN_MODE") == "release" && claims.UserName == "mojun" {
  99. // c.JSON(200, serializer.CheckLogin())
  100. // c.Abort()
  101. // return
  102. //}
  103. c.Set("user", user)
  104. c.Set("admin_role_id", user.RoleID)
  105. c.Next()
  106. return
  107. }
  108. }
  109. func isWhite(path string) bool {
  110. for _, v := range whitelist {
  111. if path == v {
  112. return true
  113. }
  114. }
  115. return false
  116. }