public async Task <IActionResult> LoginAsync([FromBody] UserAuthDto dto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } ApplicationUser user = null; bool userNotFound = false; try { user = await userService.FindUserByEmailAsync(dto.Email); } catch (CurrentEntryNotFoundException) { userNotFound = true; } if (userNotFound || !await userService.CheckPasswordAsync(user, dto.Password) || await userService.IsCustomer(user)) { ModelState.AddModelError("loginFailure", "Invalid email or password"); return(BadRequest(ModelState)); } else if (user.IsBlocked ?? false) { ModelState.AddModelError("loginFailure", "Account has been blocked"); return(BadRequest(ModelState)); } var userClaims = await jwtService.GetClaimsAsync(user); var accessToken = jwtService.GenerateJwtAccessToken(userClaims); var refreshToken = jwtService.GenerateJwtRefreshToken(); await jwtService.LoginByRefreshTokenAsync(user.Id, refreshToken); return(Ok(await GetBuildToken(accessToken, refreshToken))); }