package handler import ( "net/http" "strings" "github.com/gin-gonic/gin" "myschools.me/heritage/heritage-api/model" "myschools.me/heritage/heritage-api/service" ) type AuthLoginRequest struct { UserName string `json:"userName"` Username string `json:"username"` Password string `json:"password"` } type AuthLoginResponse struct { Token string `json:"token"` User *model.User `json:"user"` } type AuthChangePasswordRequest struct { OldPassword string `json:"oldPassword"` NewPassword string `json:"newPassword"` } func AuthLogin(c *gin.Context) { var req AuthLoginRequest if err := c.ShouldBindJSON(&req); err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{ "data": "参数错误", }) return } if req.UserName == "" { req.UserName = req.Username } req.UserName = strings.TrimSpace(req.UserName) if req.UserName == "" || req.Password == "" { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{ "data": "用户名或密码不能为空", }) return } token, safeUser, err := service.AuthLogin(req.UserName, req.Password) if err != nil { if err == service.ErrInvalidCredentials { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "data": "用户名或密码错误", }) return } c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ "data": "登录失败", }) return } c.JSON(http.StatusOK, AuthLoginResponse{ Token: token, User: safeUser, }) } func AuthLogout(c *gin.Context) { token := c.GetHeader("Authorization") if token == "" { token = c.Query("Authorization") } _ = service.AuthLogout(token) c.JSON(http.StatusOK, gin.H{ "data": "ok", }) } func AuthMe(c *gin.Context) { usr := currentUser(c) if usr == nil { c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{ "data": "无效TOKEN, 请重新登录!", }) return } c.JSON(http.StatusOK, gin.H{ "user": usr, }) }