public async Task <Response <string> > RequestUpdatePasswordByToken( [MinLength(1)] string email, [FromServices] INotificator notificator) { _logger.LogInformation("Запрос на сброс пароля по email"); var user = await _signInManager.UserManager.FindByEmailAsync(email.Trim()); if (user != null) { var token = await _signInManager.UserManager.GeneratePasswordResetTokenAsync(user); notificator.NotifyAndForgot(new ResetPasswordMetadata( user.Email, token)); } else { _logger.LogWarning($"Пользователь по email: \"{email}\" не найден. Письмо отправлено не будет."); } return(new Response <string>("Если в системе есть аккаунт с таким электронным адресом, мы вышлем вам инструкции по сбросу пароля")); }
public async Task <Response> CreateOrUpdate( [FromBody] UserEditorModel model, [FromServices] UserManager <UserEntity> userManager, [FromServices] INotificator notificator) { UserEntity user; if (model.Id.HasValue) { user = await userManager.Users .Where(x => x.Id == model.Id.Value) .SingleOrDefaultAsync() ?? throw new EntityNotFoundException($"Пользователь (id = {model.Id.Value}) не найден"); } else { user = new UserEntity(); } // часовой пояс if (!TimeZoneHelper.IsTimeZoneIdValid(model.TimeZoneId)) { throw new InvalidRequestDataException("Не корректный часовой пояс"); } user.TimeZoneId = model.TimeZoneId; // телефон if (!String.IsNullOrWhiteSpace(model.PhoneNumber)) { if (!model.PhoneNumber.CleanupPhone().IsMobilePhoneFormat()) { throw new InvalidRequestDataException("Не корректный номер телефона", nameof(model.PhoneNumber)); } user.PhoneNumber = model.PhoneNumber.ResolvePhoneTo7Format(); } // email if (!model.Id.HasValue) { if (String.IsNullOrWhiteSpace(model.Email)) { throw new InvalidRequestDataException("Email обязателен для нового пользователя", nameof(model.Email)); } user.Email = model.Email; user.UserName = model.Email; } // восстановление пользователя if (!user.IsDeleted && user.IsDeleted) { user.IsDeleted = model.IsDeleted; _logger.LogInformation($"Восстанавливаем пользователя (Id = {user.Id}) из удалённых"); } if (model.Id.HasValue) { // обновляем var result = await userManager.UpdateAsync(user); if (!result.Succeeded) { throw new InvalidRequestDataException(result.Errors); } _logger.LogInformation($"Успешно обновлен пользователь (Id = {model.Id})"); } else { // создаём var result = await userManager.CreateAsync(user); if (!result.Succeeded) { throw new InvalidRequestDataException(result.Errors); } // для завершении регистрации пользователь должен задать пароль var token = await userManager.GeneratePasswordResetTokenAsync(user); notificator.NotifyAndForgot(new RegistrationMetadata( user.Email, token)); _logger.LogInformation($"Успешно создан новый пользователь (Id = {user.Id}, email = {user.Email})"); } return(new Response()); }