public IEnumerable Handle(PasswordSignInCommand c) { _signInManager.PasswordSignInAsync(c.Email, c.Password, c.RememberMe, lockoutOnFailure: false).ContinueWith(t => { if (t.IsFaulted) { c.Message = t.Exception?.Message; } else if (t.IsCanceled) { c.Message = $"{c.GetType().Name}:Operation was cancelled"; } else { c.Succeeded = t.Result.Succeeded; c.RequiresTwoFactor = t.Result.RequiresTwoFactor; c.IsLockedOut = t.Result.IsLockedOut; c.IsNotAllowed = t.Result.IsNotAllowed; } }); c.HasError = !string.IsNullOrEmpty(c.Message); yield return(c); }
public async Task <IActionResult> Login(LoginViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true var cmd = new PasswordSignInCommand { Email = model.Email, Password = model.Password, RememberMe = model.RememberMe }; _dispatcher.SendCommand(cmd); if (cmd.Succeeded) { _logger.LogInformation(1, "User logged in."); return(RedirectToLocal(returnUrl)); } if (cmd.RequiresTwoFactor) { return(RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe })); } if (cmd.IsLockedOut) { _logger.LogWarning(2, "User account locked out."); return(View("Lockout")); } else { ModelState.AddModelError(string.Empty, "Invalid login attempt."); return(View(model)); } } await Task.FromResult <IActionResult>(null); // If we got this far, something failed, redisplay form return(View(model)); }