public async Task <CreateUser.Response> CreateUser(CreateUser.Request request, CancellationToken cancellationToken = default) { var existedUser = await _userManager.FindByEmailAsync(request.Email); if (existedUser != null) { throw new DuplicateException("Пользователь с почтой уже существует"); } var newUser = new IdentityUser { Email = request.Email, UserName = request.Username }; var identityResult = await _userManager.CreateAsync(newUser, request.Password); if (identityResult.Succeeded) { await _userManager.AddToRoleAsync(newUser, request.Role); var confirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(newUser); var encodedToken = HttpUtility.UrlEncode(confirmationToken); var message = MessageToConfirmEmail.Message(newUser.Id, newUser.Id, encodedToken, _configuration["ApiUri"]); try { await _mailService.Send(request.Email, "Подтвердите Email!", message, cancellationToken); } catch (Exception ex) { await _userManager.DeleteAsync(newUser); throw new SendingMailException("Произошла ошибка!" + ex.Message); } return(new CreateUser.Response { IsSuccess = true, UserId = newUser.Id }); } return(new CreateUser.Response { IsSuccess = false, Errors = identityResult.Errors.Select(x => x.Description).ToArray() }); }
public async Task SendEmailConfirmationToken(string userId, string email, CancellationToken cancellationToken = default) { var user = await _userManager.FindByIdAsync(userId); if (user == null) { throw new NoUserFound($"Пользователь с id {userId} не был найден"); } var confirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user); var encodedToken = HttpUtility.UrlEncode(confirmationToken); var message = MessageToConfirmEmail.Message(user.Id, email, encodedToken, _configuration["ApiUri"]); await _mailService.Send(email, "Подтвердите Email!", message, cancellationToken); }