Example #1
0
        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));
        }