public async Task <LoginResponseDTO> LoginAsync(LoginRequestDTO loginRequest) { AppUser user = await usersRepository.GetUserOrDefaultByEmailOrUserNameAsync(loginRequest.EmailOrUserName); if (user != null && usersRepository.IsUserPasswordCorrect(user, loginRequest.Password)) { var tokenClaims = GetTokenClaimsForUser(user); var refreshToken = refreshTokenFactory.GenerateToken(); await usersRepository.CreateRefreshTokenAsync(user, refreshToken); return(new LoginResponseDTO { UserName = user.UserName, Email = user.Email, Token = tokenFactory.GenerateTokenForClaims(tokenClaims), RefreshToken = refreshToken }); } throw new BadRequestException("Email, user name or password is incorrect!"); }