public async Task <ActionResult> PostAsync( [ModelBinder(typeof(CountryModelBinder))] string country, [FromBody] LoginRequest model, [FromHeader(Name = "User-Agent")] string agent, CancellationToken token) { var user = await _userManager.FindByEmailAsync(model.Email); if (user is null) { ModelState.AddModelError(nameof(model.Password), _localizer["BadLogin"]); return(BadRequest(ModelState)); } agent = agent?.Substring(0, Math.Min(agent.Length, 255)); var command = new AddUserLocationCommand(user, country, HttpContext.GetIpAddress(), model.FingerPrint, agent); var t1 = _commandBus.DispatchAsync(command, token); var t2 = _signInManager.CheckPasswordSignInAsync(user, model.Password, true); await Task.WhenAll(t1, t2); var result = t2.Result; if (result == SignInResult.Success) { await _userManager.ResetAccessFailedCountAsync(user); await _signInManager.SignInAsync(user, false); return(Ok(new { user.Country })); } if (result.IsLockedOut) { if (user.LockoutEnd == DateTimeOffset.MaxValue) { ModelState.AddModelError(nameof(model.Password), _localizer["LockOut"]); return(BadRequest(ModelState)); } ModelState.AddModelError(nameof(model.Password), _localizer["TempLockOut"]); return(BadRequest(ModelState)); } if (result.IsNotAllowed) { ModelState.AddModelError(nameof(model.Password), _localizer["NotAllowed"]); return(BadRequest(ModelState)); } ModelState.AddModelError(nameof(model.Password), _localizer["BadLogin"]); return(BadRequest(ModelState)); }
private async Task <ReturnSignUserResponse> MakeDecisionAsync(User user, bool isExternal, ReturnUrlRequest?returnUrl, CancellationToken token) { if (user.PhoneNumberConfirmed) { if (isExternal) { await _signInManager.SignInAsync(user, false); return(ReturnSignUserResponse.SignIn()); // return new ReturnSignUserResponse(false); } throw new ArgumentException(); } if (user.PhoneNumber != null) { var t1 = _signInManager.TempSignIn(user); var t2 = _client.SendSmsAsync(user, token); await Task.WhenAll(t1, t2); return(new ReturnSignUserResponse(RegistrationStep.RegisterVerifyPhone, new { phoneNumber = user.PhoneNumber })); } if (user.EmailConfirmed) { await _signInManager.TempSignIn(user); return(new ReturnSignUserResponse(RegistrationStep.RegisterSetPhone)); } await GenerateEmailAsync(user, returnUrl, token); return(new ReturnSignUserResponse(RegistrationStep.RegisterEmailConfirmed)); }