public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } var user = await UserManager.FindAsync(model.Email, model.Password); if (user != null) { if (!user.EmailConfirmed) { ModelState.AddModelError("", "Email address has not been confirmed."); await UserManager.GenerateEmailConfirmationEmailAsync(Url, user.Id); return View(model); } } else { ModelState.AddModelError("", "Invalid login attempt."); return View(model); } var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.Failure: default: ModelState.AddModelError("", "Invalid login attempt."); return View(model); } }
public async Task SubmitLoginValidModelRemoteUrlRemembered() { var loginModel = new LoginViewModel { Email = ConfirmedGoodUsername, Password = ConfirmedGoodPassword, RememberMe = true }; await SubmitLogin(loginModel, ExternalUri, redirectToHome: true); }
private async Task SubmitLogin(LoginViewModel loginModel, string returnUrl, bool verificationFail = false, bool validationFail = false, bool redirectToUri = false, bool redirectToHome = false) { var userManager = CreateMockUserManager(); var signInManager = CreateMockSignInManager(); var urlHelper = CreateMockUrlHelper(); var controller = new AccountController(userManager.Object, signInManager.Object, urlHelper.Object); var vals = Validate(loginModel); foreach (var v in vals) { foreach (var m in v.MemberNames) controller.ModelState.AddModelError(m, v.ErrorMessage); } var result = await controller.Login(loginModel, returnUrl); Assert.IsTrue(verificationFail || validationFail || redirectToUri || redirectToHome); if (verificationFail) { var vr = result as ViewResult; userManager.Verify(m => m.FindAsync(loginModel.Email, loginModel.Password), Times.AtLeastOnce); signInManager.Verify(m => m.PasswordSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>()), Times.Never); Assert.IsNotNull(vr); Assert.AreEqual(loginModel, vr.Model); } else if (validationFail) { var vr = result as ViewResult; userManager.Verify(m => m.FindAsync(It.IsAny<string>(), It.IsAny<string>()), Times.Never); signInManager.Verify(m => m.PasswordSignInAsync(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>()), Times.Never); Assert.IsNotNull(vr); Assert.AreEqual(loginModel, vr.Model); } else if (redirectToUri) { var rr = result as RedirectResult; userManager.Verify(m => m.FindAsync(loginModel.Email, loginModel.Password), Times.AtLeastOnce); signInManager.Verify(m => m.PasswordSignInAsync(loginModel.Email, loginModel.Password, loginModel.RememberMe, false), Times.Once); urlHelper.Verify(m => m.IsLocalUrl(returnUrl), Times.AtLeastOnce); Assert.IsNotNull(rr); Assert.AreEqual(returnUrl, rr.Url); Assert.AreEqual(false, rr.Permanent); } else if (redirectToHome) { var rr = result as RedirectToRouteResult; userManager.Verify(m => m.FindAsync(loginModel.Email, loginModel.Password), Times.AtLeastOnce); signInManager.Verify(m => m.PasswordSignInAsync(loginModel.Email, loginModel.Password, loginModel.RememberMe, false), Times.Once); urlHelper.Verify(m => m.IsLocalUrl(returnUrl), Times.AtLeastOnce); Assert.IsNotNull(rr); Assert.AreEqual("Index", rr.RouteValues["action"]); Assert.AreEqual("Home", rr.RouteValues["controller"]); Assert.AreEqual(false, rr.Permanent); } }
public async Task SubmitLoginValidModelNoUrlUnconfirmedEmailRemembered() { var loginModel = new LoginViewModel { Email = UnconfirmedGoodUsername, Password = UnconfirmedGoodPassword, RememberMe = true }; await SubmitLogin(loginModel, null, verificationFail: true); }
public async Task SubmitLoginValidModelNoUrlConfirmedEmailNotRemembered() { var loginModel = new LoginViewModel { Email = ConfirmedGoodUsername, Password = ConfirmedGoodPassword, RememberMe = false }; await SubmitLogin(loginModel, null, redirectToHome: true); }
public async Task SubmitLoginNoUsername() { var loginModel = new LoginViewModel { Email = null, Password = ConfirmedGoodPassword, RememberMe = true }; await SubmitLogin(loginModel, null, validationFail: true); }
public async Task SubmitLoginNoDetails() { var loginModel = new LoginViewModel { Email = null, Password = null, RememberMe = true }; await SubmitLogin(loginModel, null, validationFail: true); }
public async Task SubmitLoginBadPassword() { var loginModel = new LoginViewModel { Email = ConfirmedGoodUsername, Password = BadPassword, RememberMe = true }; await SubmitLogin(loginModel, null, verificationFail: true); }