package middleware import ( "net/http" "strings" "github.com/gin-gonic/gin" "github.com/gotunnel/pkg/auth" ) // JWTAuth JWT 认证中间件 func JWTAuth(jwtAuth *auth.JWTAuth) gin.HandlerFunc { return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{ "code": 401, "message": "missing authorization header", }) c.Abort() return } if !strings.HasPrefix(authHeader, "Bearer ") { c.JSON(http.StatusUnauthorized, gin.H{ "code": 401, "message": "invalid authorization format", }) c.Abort() return } token := strings.TrimPrefix(authHeader, "Bearer ") claims, err := jwtAuth.ValidateToken(token) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{ "code": 401, "message": "invalid or expired token", }) c.Abort() return } // 将用户信息存入上下文 c.Set("username", claims.Username) c.Set("claims", claims) c.Next() } }