Login 用户登录
(ctx *gin.Context)
| 85 | |
| 86 | // Login 用户登录 |
| 87 | func (uh *UserHandler) Login(ctx *gin.Context) { |
| 88 | var req req.LoginReq |
| 89 | if err := ctx.ShouldBindJSON(&req); err != nil { |
| 90 | apiresponse.ErrorWithMessage(ctx, "无效的请求参数") |
| 91 | return |
| 92 | } |
| 93 | |
| 94 | // 登录验证 |
| 95 | du, err := uh.svc.Login(ctx, req.Username, req.Password) |
| 96 | if err != nil { |
| 97 | if errors.Is(err, service.ErrInvalidUserOrPassword) { |
| 98 | apiresponse.ErrorWithMessage(ctx, UserLoginFailure) |
| 99 | return |
| 100 | } |
| 101 | apiresponse.ErrorWithMessage(ctx, UserLoginFailure) |
| 102 | return |
| 103 | } |
| 104 | |
| 105 | // 生成令牌 |
| 106 | jwtToken, refreshToken, err := uh.ijwt.SetLoginToken(ctx, du.ID) |
| 107 | if err != nil { |
| 108 | apiresponse.ErrorWithMessage(ctx, UserLoginFailure) |
| 109 | return |
| 110 | } |
| 111 | |
| 112 | apiresponse.SuccessWithData(ctx, map[string]string{ |
| 113 | "accessToken": jwtToken, |
| 114 | "refreshToken": refreshToken, |
| 115 | }) |
| 116 | } |
| 117 | |
| 118 | // Logout 用户登出 |
| 119 | func (uh *UserHandler) Logout(ctx *gin.Context) { |
nothing calls this directly
no test coverage detected