public async Task <bool> RegisterEmployeeAsync(EmployeeRegisterDto employeeRegisterDto) { var employee = Mapper.Map <Employee>(employeeRegisterDto); employee.IsActive = true; string password = this.GenerateEmployeePassword(); var result = await this.userManger.CreateAsync(employee, password); var emailResult = await this.emailSender.SendRegistrationMailAsync(employee.Email, employee.FullName, password); if (!emailResult) { throw new ArgumentException(ErrorMessages.SendGridMailArgumentException); } if (result.Succeeded) { if (await this.SignRolesToEmployee(employee, employeeRegisterDto.DepartmentId)) { await this.userManger.AddClaimAsync(employee, new Claim(Constants.ACCESS_LEVEL_CLAIM, employee.AccessLevel.ToString())); return(true); } } return(false); }
public async Task <IActionResult> Register(EmployeeRegisterDto employeeRegisterDto) { employeeRegisterDto.UserName = employeeRegisterDto.UserName.ToLower(); employeeRegisterDto.Email = employeeRegisterDto.Email.ToLower(); if (await _repo.EmployeeExistsUserName(employeeRegisterDto.UserName)) { return(BadRequest("اسم المستخدم مستجل مسبقا")); } if (await _repo.EmployeeExistsEmail(employeeRegisterDto.Email)) { return(BadRequest("البريد الالكتروني مستجل مسبقا")); } var employeeToCreate = new Employee { UserName = employeeRegisterDto.UserName, Email = employeeRegisterDto.Email, FirstName = employeeRegisterDto.FirstName, FatherName = employeeRegisterDto.FatherName, LastName = employeeRegisterDto.LastName, }; var CreatedEmployee = await _repo.Register(employeeToCreate, employeeRegisterDto.Password); return(StatusCode(201)); }
public async Task <IActionResult> Register([FromBody] EmployeeRegisterDto dto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var doesExist = await this.repo.EmployeeExists(dto.Email); if (doesExist) { return(BadRequest("Email is already taken!")); } var employeeToBeCreated = new Employee() { Email = dto.Email, FirstName = dto.FirstName, LastName = dto.LastName, DateOfBirth = dto.DateOfBirth, PositionId = dto.PositionId, Created = DateTime.Parse(DateTime.Now.ToString("MM/dd/yyyy H:mm")), Salary = dto.Salary, LastUpdated = DateTime.Parse(DateTime.Now.ToString("MM/dd/yyyy H:mm")) }; var defaultPassword = dto.FirstName.ToLower(); var createdEmployee = await this.repo.Register(employeeToBeCreated, defaultPassword); return(StatusCode(201)); }
// Used for tests. public async Task <IActionResult> Register([FromBody] EmployeeRegisterDto dto) { var identity = mapper.Map <EmployeeIdentity>(dto); if (await userService.CreateUser(identity, dto.Password)) { return(Ok()); } else { return(BadRequest()); } }
public async Task <IActionResult> EmployeeRegister([FromBody] EmployeeRegisterDto dto) { EmployeeRegisterDtoValidator validator = new EmployeeRegisterDtoValidator(); ValidationResult result = await validator.ValidateAsync(dto); if (result.IsValid) { #region 驗證重複 if (await _userManager.Users.AnyAsync(x => x.UserName == dto.UserName)) { result.Errors.Add(new ValidationFailure("userName", "使用者名稱已經被使用")); } if (await _userManager.Users.AnyAsync(x => x.Email == dto.Email)) { result.Errors.Add(new ValidationFailure("email", "電子郵件已經被使用")); } if (!string.IsNullOrEmpty(dto.PhoneNumber)) { if (await _userManager.Users.AnyAsync(x => x.PhoneNumber == dto.PhoneNumber)) { result.Errors.Add(new ValidationFailure("phoneNumber", "手機號碼已經被使用")); } } if (!string.IsNullOrEmpty(dto.NationalId)) { if (await _userManager.Users.AnyAsync(x => x.NationalId == dto.NationalId.ToUpper())) { result.Errors.Add(new ValidationFailure("nationalId", "身份證字號已經被使用")); } } if (!string.IsNullOrEmpty(dto.NetworkId)) { if (await _userManager.Users.AnyAsync(x => x.Administrator.NetworkId == dto.NetworkId.ToUpper() || x.Employee.NetworkId == dto.NetworkId.ToUpper() || x.Student.NetworkId == dto.NetworkId.ToUpper())) { result.Errors.Add(new ValidationFailure("networkId", "證號已經被使用")); } } #endregion if (result.IsValid) { var entity = _mapper.Map <ApplicationUser>(dto); await using (var transaction = await _dbContext.Database.BeginTransactionAsync()) { try { #region 建立使用者 if (await _userManager.CreateAsync(entity, dto.Password) != IdentityResult.Success) { throw new DbUpdateException(); } #endregion #region 添加 Claim var claims = new List <Claim> { new Claim(ClaimTypes.NameIdentifier, entity.Id), new Claim(ClaimTypes.Name, entity.UserName), new Claim(ClaimTypes.Email, entity.Email), new Claim(ClaimTypes.Sid, entity.SecurityStamp) }; if (await _userManager.AddClaimsAsync(entity, claims) != IdentityResult.Success) { throw new DbUpdateException(); } #endregion #region 添加角色 if (await _userManager.AddToRoleAsync(entity, "Employee") != IdentityResult.Success) { throw new DbUpdateException(); } #endregion await transaction.CommitAsync(); } catch (DbUpdateException) { await transaction.RollbackAsync(); throw; } } #region 寄信 var link = $"{_configuration["FrontendUrl"]}/account/email/confirm" + $"?userId={Uri.EscapeDataString(entity.Id)}" + $"&token={Uri.EscapeDataString(await _userManager.GenerateEmailConfirmationTokenAsync(entity))}"; await _mailService.SendEmailConfirmAsync(entity.Email, entity.Email, link, true); #endregion var returnDto = _mapper.Map <EmployeeProfileDto>(entity); return(CreatedAtAction(nameof(EmployeeProfile), null, returnDto)); } } return(BadRequest(result.Errors)); }