示例#1
0
        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()
            });
        }
示例#2
0
        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);
        }