package middleware import ( "net/http" "opus-api/internal/service" "strings" "github.com/gin-gonic/gin" ) // AuthMiddleware JWT 认证中间件 func AuthMiddleware(authService *service.AuthService) gin.HandlerFunc { return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{"error": "missing authorization header"}) c.Abort() return } // 解析 Bearer token parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid authorization header format"}) c.Abort() return } token := parts[1] // 验证 token userID, err := authService.ValidateToken(token) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid or expired token"}) c.Abort() return } // 将用户 ID 存储到上下文 c.Set("user_id", userID) c.Next() } } // GetUserID 从上下文获取用户 ID func GetUserID(c *gin.Context) (uint, bool) { userID, exists := c.Get("user_id") if !exists { return 0, false } id, ok := userID.(uint) return id, ok }