package middleware import ( "net/http" "strings" "github.com/gin-gonic/gin" ) // TokenParser 解析 JWT token 的接口 type TokenParser interface { ParseToken(tokenStr string) (string, error) } // JWTAuth 管理后台 JWT 鉴权中间件 func JWTAuth(parser TokenParser) gin.HandlerFunc { return func(c *gin.Context) { authHeader := c.GetHeader("Authorization") if authHeader == "" { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "401", "message": "未登录,请先登录", }) return } parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "401", "message": "Token 格式错误", }) return } username, err := parser.ParseToken(parts[1]) if err != nil { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "code": "401", "message": "Token 无效或已过期", }) return } c.Set("username", username) c.Next() } }