package controller import ( "errors" "net/http" "time" "woord-core-service/model" "github.com/gin-gonic/gin" ) type RegisterRequest struct { UserName string `form:"name" binding:"required"` Password string `form:"password" binding:"required"` } // 注册 func Register(c *gin.Context) { var request RegisterRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } user, err := model.CreateUser(request.UserName, request.Password) if err != nil { if errors.Is(err, model.ErrUserNameAlreadyExists) { respondError(c, http.StatusConflict, err) } else { respondUnknownError(c, err) } return } respondOK(c, user) } type LoginRequest struct { UserName string `form:"name" binding:"required"` Password string `form:"password" binding:"required"` } // 登录 func Login(c *gin.Context) { var request LoginRequest if err := c.ShouldBind(&request); err != nil { respondError(c, http.StatusBadRequest, err) return } user, err := model.AuthenticateUser(request.UserName, request.Password) if err != nil { if errors.Is(err, model.ErrWrongUserNameOrPassword) { respondError(c, http.StatusUnauthorized, err) } else { respondUnknownError(c, err) } return } token, err := newToken(user.ID) if err != nil { respondUnknownError(c, err) return } c.SetCookie(AuthTokenKey, token, int(720*time.Hour), "/", "regmsif.cf", true, true) respondOK(c, user) } // 获取当前用户 func GetCurrentUser(c *gin.Context) { user, err := model.GetUser(c.MustGet(AuthUserKey).(uint)) if err != nil { if errors.Is(err, model.ErrUserNotFound) { respondError(c, http.StatusNotFound, err) } else { respondUnknownError(c, err) } return } respondOK(c, user) }