token.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package token
  2. import (
  3. "errors"
  4. "fmt"
  5. "mtp2_if/config"
  6. "mtp2_if/global/e"
  7. "mtp2_if/rediscli"
  8. "net/http"
  9. "strings"
  10. "github.com/gin-gonic/gin"
  11. )
  12. // TouristToken 游客Token
  13. var TouristToken string = "c886a057f3d820d4dbc41473686c7c2d"
  14. // CheckToken Token校验
  15. func CheckToken(loginid string, token string) error {
  16. key := fmt.Sprintf("monitor:online_loginid::%s", loginid)
  17. field := "Token"
  18. realToken, err := rediscli.GetRedisClient().HGet(key, field).Result()
  19. if err != nil {
  20. return err
  21. }
  22. if realToken != token {
  23. return errors.New("token is invalid")
  24. }
  25. return nil
  26. }
  27. // Auth Token校验中间件
  28. func Auth() gin.HandlerFunc {
  29. return func(c *gin.Context) {
  30. if config.SerCfg.GetDebugMode() {
  31. c.Next()
  32. return
  33. }
  34. var code int
  35. var data interface{}
  36. code = e.SUCCESS
  37. token := c.GetHeader("Authorization")
  38. if token == "" {
  39. // Token缺失
  40. code = e.ERROR_AUTH_CHECK_TOKEN_MISSING
  41. } else {
  42. // 获取loginid
  43. s := strings.Split(token, "_")
  44. loginid := s[0]
  45. if err := CheckToken(loginid, token); err != nil {
  46. // Token错误
  47. code = e.ERROR_AUTH_CHECK_TOKEN_FAIL
  48. }
  49. }
  50. // Token检验失败
  51. if code != e.SUCCESS {
  52. c.JSON(http.StatusUnauthorized, gin.H{
  53. "code": code,
  54. "msg": e.GetMsg(code),
  55. "data": data,
  56. })
  57. c.Abort()
  58. return
  59. }
  60. // FIXME: - 针对POST接口,应判断传入TOKEN对应的用户是否正确(比如判断UserID或AccountID是否对得上等),后期处理
  61. // Token检验成功
  62. c.Next()
  63. }
  64. }
  65. // AuthByHsby 游客鉴权
  66. func AuthByHsby() gin.HandlerFunc {
  67. return func(c *gin.Context) {
  68. // 包含accountID、accountIDs、userID和userIDs等参数需要走正常鉴权
  69. accountID := c.Query("accountID")
  70. accountIDs := c.Query("accountIDs")
  71. userID := c.Query("userID")
  72. userIDs := c.Query("userIDs")
  73. if len(accountID) != 0 || len(accountIDs) != 0 || len(userID) != 0 || len(userIDs) != 0 {
  74. if config.SerCfg.GetDebugMode() {
  75. c.Next()
  76. return
  77. }
  78. var code int
  79. var data interface{}
  80. code = e.SUCCESS
  81. token := c.GetHeader("Authorization")
  82. if token == "" {
  83. // Token缺失
  84. code = e.ERROR_AUTH_CHECK_TOKEN_MISSING
  85. } else {
  86. // 获取loginid
  87. s := strings.Split(token, "_")
  88. loginid := s[0]
  89. if err := CheckToken(loginid, token); err != nil {
  90. // Token错误
  91. code = e.ERROR_AUTH_CHECK_TOKEN_FAIL
  92. }
  93. }
  94. // Token检验失败
  95. if code != e.SUCCESS {
  96. c.JSON(http.StatusUnauthorized, gin.H{
  97. "code": code,
  98. "msg": e.GetMsg(code),
  99. "data": data,
  100. })
  101. c.Abort()
  102. return
  103. }
  104. // FIXME: - 针对POST接口,应判断传入TOKEN对应的用户是否正确(比如判断UserID或AccountID是否对得上等),后期处理
  105. // Token检验成功
  106. c.Next()
  107. return
  108. }
  109. var code int
  110. var data interface{}
  111. code = e.SUCCESS
  112. token := c.GetHeader("Authorization")
  113. if token == "" {
  114. // Token缺失
  115. code = e.ERROR_AUTH_CHECK_TOKEN_MISSING
  116. } else {
  117. if token != TouristToken {
  118. // Token错误
  119. code = e.ERROR_AUTH_CHECK_TOKEN_FAIL
  120. }
  121. }
  122. // Token检验失败
  123. if code != e.SUCCESS {
  124. c.JSON(http.StatusUnauthorized, gin.H{
  125. "code": code,
  126. "msg": e.GetMsg(code),
  127. "data": data,
  128. })
  129. c.Abort()
  130. return
  131. }
  132. // Token检验成功
  133. c.Next()
  134. }
  135. }