public async Task <TokensResponse> LoginAsync(LoginModel loginModel) { if (!loginModel.IsValid) { throw new ArgumentException("Login model is invalid"); } var existedUser = await _context.Users.FirstOrDefaultAsync(user => EF.Functions.Like(user.Email.ToUpper(), loginModel.Email.Trim().ToUpper())); if (existedUser == null || !existedUser.IsEnabled || !PasswordHasher.VerifyPassword(loginModel.Password, existedUser.PasswordHash)) { throw new ArgumentException("Passwords don't match"); } return(await _tokenProvider.GenerateTokensAsync(existedUser)); }