package middleware import ( "ankao/internal/database" "ankao/internal/models" "net/http" "strings" "github.com/gin-gonic/gin" ) // Auth 认证中间件 func Auth() gin.HandlerFunc { return func(c *gin.Context) { // 从请求头获取token authHeader := c.GetHeader("Authorization") if authHeader == "" { c.JSON(http.StatusUnauthorized, gin.H{ "success": false, "message": "未登录", }) c.Abort() return } // 解析Bearer token parts := strings.SplitN(authHeader, " ", 2) if len(parts) != 2 || parts[0] != "Bearer" { c.JSON(http.StatusUnauthorized, gin.H{ "success": false, "message": "token格式错误", }) c.Abort() return } token := parts[1] // 从数据库查找token对应的用户 db := database.GetDB() var user models.User if err := db.Where("token = ?", token).First(&user).Error; err != nil { c.JSON(http.StatusUnauthorized, gin.H{ "success": false, "message": "token无效或已过期", }) c.Abort() return } // 将用户ID设置到上下文 c.Set("user_id", user.ID) c.Set("username", user.Username) c.Next() } }