token.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package middleware
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "iot_manager_service/util/cache"
  5. "iot_manager_service/util/common"
  6. "iot_manager_service/util/token"
  7. "net/http"
  8. "strings"
  9. )
  10. // 验证token令牌的中间件
  11. func AuthMiddleware() gin.HandlerFunc {
  12. return func(c *gin.Context) {
  13. //如果包含路径/login则放行,其余的都要进行token认证
  14. if strings.Contains(c.Request.RequestURI, "/login") ||
  15. strings.Contains(c.Request.RequestURI, "/websocket") ||
  16. strings.Contains(c.Request.RequestURI, "/getPublicKey") {
  17. c.Next()
  18. return
  19. }
  20. // 从请求头中获取token
  21. tokenString := c.GetHeader("Authorization")
  22. if tokenString == "" {
  23. c.JSON(http.StatusOK, common.ParamsInvalidResponse("验证不能为空", nil))
  24. c.Abort()
  25. return
  26. }
  27. //解析token
  28. claims, err := token.JwtClaims.ParseJwtToken(tokenString)
  29. //过期或者无效
  30. if err != nil {
  31. c.JSON(http.StatusUnauthorized, common.StatusUnauthorized("登录过期,请重新登录", nil))
  32. c.Abort()
  33. return
  34. }
  35. user, _ := cache.GetNowSysUser(claims.ID)
  36. if user.ID == 0 {
  37. c.JSON(http.StatusUnauthorized, common.StatusUnauthorized("请先登录!", nil))
  38. c.Abort()
  39. return
  40. }
  41. c.Next()
  42. }
  43. }