コード例 #1
0
        public async Task <UserRegisterResponse> Handle(UserRegisterCommand input)
        {
            await new UserRegisterCommandValidator().ValidateAndThrowAsync(input);

            var user = _mapper.Map <User>(input);

            if (string.IsNullOrEmpty(user.UserName))
            {
                user.UserName = new string(user.Email.TakeWhile(c => c != '@').ToArray());
            }

            var identityResult = await _userManager.CreateAsync(user, input.Password);

            if (!identityResult.Succeeded)
            {
                throw new IdentityResultException(identityResult);
            }

            var confirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var callbackUrl = _urlHelper.Action(
                "ConfirmEmail",
                "User",
                new UserConfirmEmailCommand {
                UserId = user.Id, ConfirmationToken = confirmationToken
            },
                protocol: _httpContextAccessor.HttpContext.Request.Scheme);

            //TODO: Подумать. Возможно не стоит дожидаться отправки письма
            await _emailSender.SendEmailAsync(input.Email, "Подтвердите регистрацию",
                                              $"Подтвердите регистрацию, перейдя по ссылке: <a href='{callbackUrl}'>link</a>");

            var tokenString = await _jwtGetTokenStringForUserHandler.Handle(user);

            user.UserJwtTokens = new List <UserJwtToken>
            {
                new UserJwtToken {
                    Token = tokenString, ExpirationDateTime = DateTime.UtcNow.AddDays(1)
                }
            };
            await _userManager.UpdateAsync(user);

            return(new UserRegisterResponse {
                Token = tokenString
            });
        }
コード例 #2
0
        public async Task <UserLoginResponse> Handle(UserLoginCommand input)
        {
            var user = await _userManager.FindByEmailAsync(input.Email);

            //Возвращаем одинаковые ошибки, избегаем подбора
            if (user == null)
            {
                throw new AuthenticationException("Неверный email или пароль");
            }

            var isPasswordOk = await _userManager.CheckPasswordAsync(user, input.Password);

            if (!isPasswordOk)
            {
                var identityResult = await _userManager.AccessFailedAsync(user);

                throw !identityResult.Succeeded
                    ? (Exception) new IdentityResultException(identityResult)
                    : new AuthenticationException("Неверный email или пароль");
            }

            var tokenString = await _jwtGetTokenStringForUserHandler.Handle(user);

            await _arterialPressureContext.UserJwtTokens.AddAsync(new UserJwtToken
            {
                UserId             = user.Id,
                Token              = tokenString,
                ExpirationDateTime = input.RememberMe ? (DateTime?)null : DateTime.Now.AddDays(1)
            });

            await _arterialPressureContext.SaveChangesAsync();

            return(new UserLoginResponse {
                Token = tokenString, EmailConfirmed = user.EmailConfirmed
            });
        }