EmailLogin email login
(ctx context.Context, req *schema.UserEmailLoginReq)
| 155 | |
| 156 | // EmailLogin email login |
| 157 | func (us *UserService) EmailLogin(ctx context.Context, req *schema.UserEmailLoginReq) (resp *schema.UserLoginResp, err error) { |
| 158 | siteLogin, err := us.siteInfoService.GetSiteLogin(ctx) |
| 159 | if err != nil { |
| 160 | return nil, err |
| 161 | } |
| 162 | if !siteLogin.AllowPasswordLogin { |
| 163 | return nil, errors.BadRequest(reason.NotAllowedLoginViaPassword) |
| 164 | } |
| 165 | userInfo, exist, err := us.userRepo.GetByEmail(ctx, req.Email) |
| 166 | if err != nil { |
| 167 | return nil, err |
| 168 | } |
| 169 | if !exist || userInfo.Status == entity.UserStatusDeleted { |
| 170 | return nil, errors.BadRequest(reason.EmailOrPasswordWrong) |
| 171 | } |
| 172 | if !us.verifyPassword(ctx, req.Pass, userInfo.Pass) { |
| 173 | return nil, errors.BadRequest(reason.EmailOrPasswordWrong) |
| 174 | } |
| 175 | ok, externalID, err := us.userExternalLoginService.CheckUserStatusInUserCenter(ctx, userInfo.ID) |
| 176 | if err != nil { |
| 177 | return nil, err |
| 178 | } |
| 179 | if !ok { |
| 180 | return nil, errors.BadRequest(reason.EmailOrPasswordWrong) |
| 181 | } |
| 182 | |
| 183 | err = us.userRepo.UpdateLastLoginDate(ctx, userInfo.ID) |
| 184 | if err != nil { |
| 185 | log.Errorf("update last login data failed, err: %v", err) |
| 186 | } |
| 187 | |
| 188 | roleID, err := us.userRoleService.GetUserRole(ctx, userInfo.ID) |
| 189 | if err != nil { |
| 190 | log.Error(err) |
| 191 | } |
| 192 | |
| 193 | resp = &schema.UserLoginResp{} |
| 194 | resp.ConvertFromUserEntity(userInfo) |
| 195 | resp.Avatar = us.siteInfoService.FormatAvatar(ctx, userInfo.Avatar, userInfo.EMail, userInfo.Status).GetURL() |
| 196 | userCacheInfo := &entity.UserCacheInfo{ |
| 197 | UserID: userInfo.ID, |
| 198 | EmailStatus: userInfo.MailStatus, |
| 199 | UserStatus: userInfo.Status, |
| 200 | RoleID: roleID, |
| 201 | ExternalID: externalID, |
| 202 | } |
| 203 | resp.AccessToken, resp.VisitToken, err = us.authService.SetUserCacheInfo(ctx, userCacheInfo) |
| 204 | if err != nil { |
| 205 | return nil, err |
| 206 | } |
| 207 | resp.RoleID = userCacheInfo.RoleID |
| 208 | if resp.RoleID == role.RoleAdminID { |
| 209 | err = us.authService.SetAdminUserCacheInfo(ctx, resp.AccessToken, userCacheInfo) |
| 210 | if err != nil { |
| 211 | return nil, err |
| 212 | } |
| 213 | } |
| 214 |
no test coverage detected