package controllers import ( "baihu/internal/middleware" "baihu/internal/services" "baihu/internal/utils" "github.com/gin-gonic/gin" ) type AuthController struct { userService *services.UserService } func NewAuthController(userService *services.UserService) *AuthController { return &AuthController{userService: userService} } func (ac *AuthController) Login(c *gin.Context) { var req struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, err.Error()) return } user := ac.userService.GetUserByUsername(req.Username) if user == nil || !ac.userService.ValidatePassword(user, req.Password) { utils.Unauthorized(c, "用户名或密码错误") return } // 生成 token token, err := utils.GenerateToken(user.ID, user.Username) if err != nil { utils.ServerError(c, "登录失败") return } // 设置 Cookie middleware.SetAuthCookie(c, token) utils.Success(c, gin.H{ "user": user.Username, }) } func (ac *AuthController) Logout(c *gin.Context) { middleware.ClearAuthCookie(c) utils.SuccessMsg(c, "退出成功") } func (ac *AuthController) GetCurrentUser(c *gin.Context) { username, exists := c.Get("username") if !exists { utils.Unauthorized(c, "未登录") return } utils.Success(c, gin.H{ "username": username, }) } func (ac *AuthController) Register(c *gin.Context) { var req struct { Username string `json:"username" binding:"required"` Email string `json:"email" binding:"required"` Password string `json:"password" binding:"required"` } if err := c.ShouldBindJSON(&req); err != nil { utils.BadRequest(c, err.Error()) return } user := ac.userService.CreateUser(req.Username, req.Email, req.Password, "user") utils.Success(c, user) }