package system import ( "kra/pkg/jwt" "kra/pkg/response" "kra/pkg/utils" "github.com/gin-gonic/gin" ) type BaseApi struct{} // LoginRequest 登录请求 type LoginRequest struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` Captcha string `json:"captcha"` CaptchaId string `json:"captchaId"` } // LoginResponse 登录响应 type LoginResponse struct { User interface{} `json:"user"` Token string `json:"token"` ExpiresAt int64 `json:"expiresAt"` } // JWT实例(需要在初始化时设置) var jwtInstance *jwt.JWT // SetJWTInstance 设置JWT实例 func SetJWTInstance(j *jwt.JWT) { jwtInstance = j } // Login 用户登录 func (b *BaseApi) Login(c *gin.Context) { var req LoginRequest if err := c.ShouldBindJSON(&req); err != nil { response.FailWithMessage(err.Error(), c) return } user, err := userUsecase.Login(c, req.Username, req.Password) if err != nil { response.FailWithMessage("用户名不存在或者密码错误", c) return } if user.Enable != 1 { response.FailWithMessage("用户被禁止登录", c) return } // 生成token claims := jwtInstance.CreateClaims(jwt.BaseClaims{ UUID: user.UUID.String(), ID: user.ID, Username: user.Username, NickName: user.NickName, AuthorityID: user.AuthorityId, }) token, err := jwtInstance.CreateToken(claims.BaseClaims) if err != nil { response.FailWithMessage("获取token失败", c) return } utils.SetToken(c, token, int(jwtInstance.ExpiresAt.Seconds())) response.OkWithDetailed(LoginResponse{ User: toUserResponse(user), Token: token, ExpiresAt: claims.ExpiresAt.UnixMilli(), }, "登录成功", c) }