clamis.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package utils
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gofrs/uuid/v5"
  5. "net"
  6. "server/global"
  7. systemReq "server/model/system/request"
  8. )
  9. func ClearToken(c *gin.Context) {
  10. // 增加cookie x-token 向来源的web添加
  11. host, _, err := net.SplitHostPort(c.Request.Host)
  12. if err != nil {
  13. host = c.Request.Host
  14. }
  15. if net.ParseIP(host) != nil {
  16. c.SetCookie("x-token", "", -1, "/", "", false, false)
  17. } else {
  18. c.SetCookie("x-token", "", -1, "/", host, false, false)
  19. }
  20. }
  21. func SetToken(c *gin.Context, token string, maxAge int) {
  22. // 增加cookie x-token 向来源的web添加
  23. host, _, err := net.SplitHostPort(c.Request.Host)
  24. if err != nil {
  25. host = c.Request.Host
  26. }
  27. if net.ParseIP(host) != nil {
  28. c.SetCookie("x-token", token, maxAge, "/", "", false, false)
  29. } else {
  30. c.SetCookie("x-token", token, maxAge, "/", host, false, false)
  31. }
  32. }
  33. func GetToken(c *gin.Context) string {
  34. token, _ := c.Cookie("x-token")
  35. if token == "" {
  36. token = c.Request.Header.Get("x-token")
  37. }
  38. return token
  39. }
  40. func GetClaims(c *gin.Context) (*systemReq.CustomClaims, error) {
  41. token := GetToken(c)
  42. j := NewJWT()
  43. claims, err := j.ParseToken(token)
  44. if err != nil {
  45. global.GVA_LOG.Error("从Gin的Context中获取从jwt解析信息失败, 请检查请求头是否存在x-token且claims是否为规定结构")
  46. }
  47. return claims, err
  48. }
  49. // GetUserID 从Gin的Context中获取从jwt解析出来的用户ID
  50. func GetUserID(c *gin.Context) uint {
  51. if claims, exists := c.Get("claims"); !exists {
  52. if cl, err := GetClaims(c); err != nil {
  53. return 0
  54. } else {
  55. return cl.BaseClaims.ID
  56. }
  57. } else {
  58. waitUse := claims.(*systemReq.CustomClaims)
  59. return waitUse.BaseClaims.ID
  60. }
  61. }
  62. // GetUserUuid 从Gin的Context中获取从jwt解析出来的用户UUID
  63. func GetUserUuid(c *gin.Context) uuid.UUID {
  64. if claims, exists := c.Get("claims"); !exists {
  65. if cl, err := GetClaims(c); err != nil {
  66. return uuid.UUID{}
  67. } else {
  68. return cl.UUID
  69. }
  70. } else {
  71. waitUse := claims.(*systemReq.CustomClaims)
  72. return waitUse.UUID
  73. }
  74. }
  75. // GetUserAuthorityId 从Gin的Context中获取从jwt解析出来的用户角色id
  76. func GetUserAuthorityId(c *gin.Context) uint {
  77. if claims, exists := c.Get("claims"); !exists {
  78. if cl, err := GetClaims(c); err != nil {
  79. return 0
  80. } else {
  81. return cl.AuthorityId
  82. }
  83. } else {
  84. waitUse := claims.(*systemReq.CustomClaims)
  85. return waitUse.AuthorityId
  86. }
  87. }
  88. // GetUserInfo 从Gin的Context中获取从jwt解析出来的用户角色id
  89. func GetUserInfo(c *gin.Context) *systemReq.CustomClaims {
  90. if claims, exists := c.Get("claims"); !exists {
  91. if cl, err := GetClaims(c); err != nil {
  92. return nil
  93. } else {
  94. return cl
  95. }
  96. } else {
  97. waitUse := claims.(*systemReq.CustomClaims)
  98. return waitUse
  99. }
  100. }
  101. // GetUserName 从Gin的Context中获取从jwt解析出来的用户名
  102. func GetUserName(c *gin.Context) string {
  103. if claims, exists := c.Get("claims"); !exists {
  104. if cl, err := GetClaims(c); err != nil {
  105. return ""
  106. } else {
  107. return cl.Username
  108. }
  109. } else {
  110. waitUse := claims.(*systemReq.CustomClaims)
  111. return waitUse.Username
  112. }
  113. }