login_middleware.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package middlewares
  2. import (
  3. "Panel_development/app/e"
  4. "Panel_development/nats"
  5. "github.com/bytedance/sonic"
  6. "github.com/gin-gonic/gin"
  7. "strings"
  8. "time"
  9. )
  10. type UserResponse struct {
  11. Code int `json:"code"`
  12. Message string `json:"message"`
  13. User any `json:"user,omitempty"`
  14. }
  15. func LoginMiddleware() gin.HandlerFunc {
  16. return func(c *gin.Context) {
  17. header := c.GetHeader("Authorization")
  18. split := strings.Split(header, ":")
  19. if len(split) != 2 {
  20. e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg())
  21. c.Abort()
  22. return
  23. }
  24. request, err := nats.Nats.Request("login_token_validation", []byte(split[1]), 3*time.Second)
  25. if err != nil {
  26. e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg())
  27. c.Abort()
  28. } else {
  29. var response UserResponse
  30. sonic.Unmarshal(request.Data, &response)
  31. if response.Code == 200 {
  32. c.Set("user", response.User)
  33. c.Next()
  34. } else {
  35. e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg())
  36. c.Abort()
  37. }
  38. }
  39. }
  40. }