From 14ec7960a1ab539ceee4f14938976789e445ce76 Mon Sep 17 00:00:00 2001 From: Hao Kung Date: Tue, 30 Dec 2014 14:59:07 -0800 Subject: [PATCH] React to identity changes --- .../Controllers/AccountController.cs | 25 +++--- .../Controllers/AccountController.cs | 85 +++++++++++-------- .../Controllers/ManageController.cs | 2 +- test/E2ETests/Implementation/Scenarios.cs | 2 +- 4 files changed, 63 insertions(+), 51 deletions(-) diff --git a/src/MusicStore.Spa/Controllers/AccountController.cs b/src/MusicStore.Spa/Controllers/AccountController.cs index 51b565da18..1c869f30e7 100644 --- a/src/MusicStore.Spa/Controllers/AccountController.cs +++ b/src/MusicStore.Spa/Controllers/AccountController.cs @@ -37,18 +37,19 @@ namespace MusicStore.Controllers { if (ModelState.IsValid == true) { - var signInStatus = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); - switch (signInStatus) + var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); + if (result.Succeeded) { - case SignInStatus.Success: - return RedirectToLocal(returnUrl); - case SignInStatus.LockedOut: - ModelState.AddModelError("", "User is locked out, try again later."); - return View(model); - case SignInStatus.Failure: - default: - ModelState.AddModelError("", "Invalid username or password."); - return View(model); + return RedirectToLocal(returnUrl); + } + if (result.IsLockedOut) + { + ModelState.AddModelError("", "User is locked out, try again later."); + } + else + { + ModelState.AddModelError("", "Invalid username or password."); + return View(model); } } @@ -138,7 +139,7 @@ namespace MusicStore.Controllers { foreach (var error in result.Errors) { - ModelState.AddModelError("", error); + ModelState.AddModelError("", error.Description); } } diff --git a/src/MusicStore/Controllers/AccountController.cs b/src/MusicStore/Controllers/AccountController.cs index 007b40b4c4..a14fd5e6c1 100644 --- a/src/MusicStore/Controllers/AccountController.cs +++ b/src/MusicStore/Controllers/AccountController.cs @@ -45,19 +45,23 @@ namespace MusicStore.Controllers // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, change to shouldLockout: true - var signInStatus = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false, cancellationToken: Context.RequestAborted); - switch (signInStatus) + var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false, cancellationToken: Context.RequestAborted); + if (result.Succeeded) { - case SignInStatus.Success: - return RedirectToLocal(returnUrl); - case SignInStatus.LockedOut: - return View("Lockout"); - case SignInStatus.RequiresVerification: - return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); - case SignInStatus.Failure: - default: - ModelState.AddModelError("", "Invalid login attempt."); - return View(model); + return RedirectToLocal(returnUrl); + } + if (result.RequiresTwoFactor) + { + return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); + } + if (result.IsLockedOut) + { + return View("Lockout"); + } + else + { + ModelState.AddModelError("", "Invalid login attempt."); + return View(model); } } @@ -99,17 +103,20 @@ namespace MusicStore.Controllers // will be locked out for a specified amount of time. // You can configure the account lockout settings in IdentityConfig var result = await SignInManager.TwoFactorSignInAsync(model.Provider, model.Code, model.RememberMe, model.RememberBrowser, cancellationToken: Context.RequestAborted); - switch (result) + if (result.Succeeded) { - case SignInStatus.Success: - return RedirectToLocal(model.ReturnUrl); - case SignInStatus.LockedOut: - return View("Lockout"); - case SignInStatus.Failure: - default: - ModelState.AddModelError("", "Invalid code."); - return View(model); + return RedirectToLocal(model.ReturnUrl); } + if (result.IsLockedOut) + { + return View("Lockout"); + } + else + { + ModelState.AddModelError("", "Invalid code."); + return View(model); + } + } // @@ -346,22 +353,26 @@ namespace MusicStore.Controllers // Sign in the user with this external login provider if the user already has a login var result = await SignInManager.ExternalLoginSignInAsync(loginInfo.LoginProvider, loginInfo.ProviderKey, isPersistent: false, cancellationToken: Context.RequestAborted); - switch (result) + if (result.Succeeded) { - case SignInStatus.Success: - return RedirectToLocal(returnUrl); - case SignInStatus.LockedOut: - return View("Lockout"); - case SignInStatus.RequiresVerification: - return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }); - case SignInStatus.Failure: - default: - // If the user does not have an account, then prompt the user to create an account - ViewBag.ReturnUrl = returnUrl; - ViewBag.LoginProvider = loginInfo.LoginProvider; - // REVIEW: handle case where email not in claims? - var email = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Email); - return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = email }); + return RedirectToLocal(returnUrl); + } + if (result.RequiresTwoFactor) + { + return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }); + } + if (result.IsLockedOut) + { + return View("Lockout"); + } + else + { + // If the user does not have an account, then prompt the user to create an account + ViewBag.ReturnUrl = returnUrl; + ViewBag.LoginProvider = loginInfo.LoginProvider; + // REVIEW: handle case where email not in claims? + var email = loginInfo.ExternalIdentity.FindFirstValue(ClaimTypes.Email); + return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = email }); } } @@ -437,7 +448,7 @@ namespace MusicStore.Controllers { foreach (var error in result.Errors) { - ModelState.AddModelError("", error); + ModelState.AddModelError("", error.Description); } } diff --git a/src/MusicStore/Controllers/ManageController.cs b/src/MusicStore/Controllers/ManageController.cs index 2b3e914398..8940bc209f 100644 --- a/src/MusicStore/Controllers/ManageController.cs +++ b/src/MusicStore/Controllers/ManageController.cs @@ -337,7 +337,7 @@ namespace MusicStore.Controllers { foreach (var error in result.Errors) { - ModelState.AddModelError("", error); + ModelState.AddModelError("", error.Description); } } diff --git a/test/E2ETests/Implementation/Scenarios.cs b/test/E2ETests/Implementation/Scenarios.cs index 65d6499ddc..8519fddbc0 100644 --- a/test/E2ETests/Implementation/Scenarios.cs +++ b/test/E2ETests/Implementation/Scenarios.cs @@ -174,7 +174,7 @@ namespace E2ETests var content = new FormUrlEncodedContent(formParameters.ToArray()); response = _httpClient.PostAsync("Account/Register", content).Result; responseContent = response.Content.ReadAsStringAsync().Result; - Assert.Contains(string.Format("Name {0} is already taken.", email), responseContent, StringComparison.OrdinalIgnoreCase); + Assert.Contains(string.Format("UserName '{0}' is already taken.", email), responseContent, StringComparison.OrdinalIgnoreCase); Console.WriteLine("Identity threw a valid exception that user '{0}' already exists in the system", email); }