jwt.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package middleware
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/gin-gonic/gin"
  6. "newaterobot-process/service"
  7. )
  8. // JWTAuthMiddleware JWT认证中间件
  9. func JWTAuthMiddleware() gin.HandlerFunc {
  10. return func(c *gin.Context) {
  11. // 获取token
  12. authHeader := c.GetHeader("Authorization")
  13. if authHeader == "" {
  14. c.JSON(http.StatusUnauthorized, gin.H{
  15. "code": 401,
  16. "message": "请求未携带token,无权限访问",
  17. })
  18. c.Abort()
  19. return
  20. }
  21. // 按空格分割
  22. parts := strings.SplitN(authHeader, " ", 2)
  23. if !(len(parts) == 2 && parts[0] == "Bearer") {
  24. c.JSON(http.StatusUnauthorized, gin.H{
  25. "code": 401,
  26. "message": "请求头中auth格式有误",
  27. })
  28. c.Abort()
  29. return
  30. }
  31. // 解析token
  32. claims, err := service.GetJWTService().ParseToken(parts[1])
  33. if err != nil {
  34. c.JSON(http.StatusUnauthorized, gin.H{
  35. "code": 401,
  36. "message": "token无效或已过期",
  37. })
  38. c.Abort()
  39. return
  40. }
  41. // 将用户信息保存到上下文
  42. c.Set("user_id", claims.UserID)
  43. c.Set("username", claims.Username)
  44. c.Next()
  45. }
  46. }