public async Task <ActionResult> Create(UserCreatorVM vm) { CheckPasswordAuth(); if (!ModelState.IsValid) { return(await ViewCreateFormAsync(vm)); } try { if (vm.CreatePersonalPage) { var page = await _pages.CreateDefaultUserPageAsync(vm, User); vm.PersonalPageId = page.Id; vm.CreatePersonalPage = false; } await _users.CreateAsync(vm); await _db.SaveChangesAsync(); return(RedirectToSuccess("Пользователь создан")); } catch (ValidationException ex) { SetModelState(ex); return(await ViewCreateFormAsync(vm)); } }
/// <summary> /// Displays the form for creating a new password-authorized user. /// </summary> private async Task <ActionResult> ViewCreateFormAsync(UserCreatorVM vm) { var pageItems = await GetPageItemsAsync(vm.PersonalPageId); ViewBag.Data = new UserEditorDataVM { IsSelf = false, UserRoleItems = ViewHelper.GetEnumSelectList(vm.Role, except: new[] { UserRole.Unvalidated }), PageItems = pageItems }; return(View("Create", vm)); }
/// <summary> /// Performs additional checks on the registration request. /// </summary> private async Task ValidateRegisterRequestAsync(UserCreatorVM vm) { var val = new Validator(); if (FuzzyDate.TryParse(vm.Birthday) == null) { val.Add(nameof(vm.Birthday), "Дата рождения указана неверно."); } var emailExists = await _db.Users.AnyAsync(x => x.Email == vm.Email); if (emailExists) { val.Add(nameof(vm.Email), "Адрес электронной почты уже зарегистрирован."); } val.ThrowIfInvalid(); }
/// <summary> /// Creates a new user with login-password auth. /// </summary> public async Task <AppUser> CreateAsync(UserCreatorVM vm) { ValidatePasswordForm(vm); await ValidateRegisterRequestAsync(vm); var user = _mapper.Map <AppUser>(vm); user.Id = Guid.NewGuid().ToString(); user.AuthType = AuthType.Password; user.IsValidated = true; var createResult = await _userMgr.CreateAsync(user, vm.Password); if (!createResult.Succeeded) { var msgs = createResult.Errors.Select(x => new KeyValuePair <string, string>("", x.Description)).ToList(); throw new ValidationException(msgs); } await _userMgr.AddToRoleAsync(user, vm.Role.ToString()); return(user); }