public async Task <LogOnResponse> LogOn(LogOnRequest request) { var response = new LogOnResponse(); var user = await _userRepository.Select(x => x.Email == request.Email); if (user.IsNotExist() || !user.IsActive) { response.ErrorMessages.Add("user_not_found_or_not_active"); response.Status = ResponseStatus.Invalid; return(response); } if (_cryptoHelper.Hash(request.Password, user.ObfuscationSalt) == user.PasswordHash) { if (user.LoginTryCount < 6 || user.LastLoginTryAt.HasValue && user.LastLoginTryAt.Value.AddHours(1) < DateTime.UtcNow) { user.LastLoginAt = DateTime.UtcNow; user.LoginTryCount = 0; var loginLog = _userLoginLogFactory.CreateEntityFromRequest(request, user); var uowResult = await _logOnUnitOfWork.DoWork(user, loginLog); if (uowResult) { _cacheManager.UpsertUserCache(user, _userFactory.MapCurrentUser(user)); response.Status = ResponseStatus.Success; response.Item.OrganizationUid = user.OrganizationUid; response.Item.Name = user.Name; response.Item.Email = user.Email; return(response); } } } user.LastLoginAt = null; user.LastLoginTryAt = DateTime.UtcNow; user.LoginTryCount++; await _userRepository.Update(user.Id, user); response.ErrorMessages.Add("password_invalid"); response.Status = ResponseStatus.Failed; return(response); }
private void LogOnEventHandle(LogOnResponse response) { try { if (response != null) { switch (response.code) { case 0: { LogonWindow logonWindow = this.dataService.LoginWindow as LogonWindow; if (logonWindow != null) { logonWindow.LogonPanel.LogonButtonEnable(); } this.logOnMsg.Message = "验证失败,用户名不存在!"; this.connection.Disconnect(); break; } case 1: this.logOnMsg.Message = "验证成功,正在获取数据..."; this.InitUserInfo(response); this.dataService.ServerInfo.AESKey = System.Convert.FromBase64String(response.key); this.EnterINWindow(); break; case 2: { LogonWindow logonWindow2 = this.dataService.LoginWindow as LogonWindow; if (logonWindow2 != null) { logonWindow2.LogonPanel.LogonButtonEnable(); } this.logOnMsg.Message = "验证失败,密码错误!"; this.connection.Disconnect(); break; } } } } catch (System.Exception e) { this.logger.Error(e.ToString()); } }
private void InitUserInfo(LogOnResponse response) { if (response != null) { this.sessionService.DepartmentId = response.department_id; this.sessionService.Uid = response.uid; this.sessionService.Jid = response.jid; this.sessionService.Name = response.name; this.sessionService.NickName = response.nickname; this.sessionService.Actor = response.level; this.sessionService.ServerTimeStamp = response.serverTimeStamp; this.sessionService.HeaderFileName = response.img; this.sessionService.Sex = (Sex)System.Enum.Parse(typeof(Sex), response.sex.ToString()); this.sessionService.Signature = response.signature; this.sessionService.Status = (UserStatus)System.Enum.Parse(typeof(UserStatus), response.status.ToString()); Logger.Jid = response.jid; } }