public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } var userId = db.Users.Where(x => x.Email == model.Email).Select(x => x.Id).FirstOrDefault(); if (String.IsNullOrWhiteSpace(userId)) return View(model); var userProfile = (from u in db.Users where u.Id == userId select u.ActivationCode).FirstOrDefault(); var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); if (result.ToString() == "Success") { Session["AccountInfo"] = userId; var RolesForUser = await UserManager.GetRolesAsync(userId); string password = db.Users.Where(x => x.Email == model.Email) .Select(x => x.PasswordHash) .Single(); bool passwordMatches = Crypto.VerifyHashedPassword(password, model.Password); string requestedUrl = Session["InitialRequest"] as string; // string requestedUrl = returnUrl; if (userId != null && passwordMatches == true) { switch (RolesForUser[0].ToString()) { case "Supplier": if (userProfile != null) { return RedirectToAction("ActivateAccount"); } if (String.IsNullOrWhiteSpace(returnUrl)) { return RedirectToAction("Index", "Supplier"); } return Redirect(returnUrl); case "Admin": return RedirectToAction("Index", "Admin"); case "Customer": if (userProfile != null) { return RedirectToAction("ActivateAccount", "Account"); } if (String.IsNullOrWhiteSpace(returnUrl)) { return RedirectToAction("Index", "Customer"); } //if (pendingUser.ActivationCode != null) //{ // return RedirectToAction("ActivateAccount", "Account"); //} return Redirect(returnUrl); } return RedirectToAction("ActivateAccount", "Account"); } } switch (result) { 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); } }
public async Task<ActionResult> LoginSupplier(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, change to shouldLockout: true var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: return RedirectToAction("Index", "Supplier"); 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); } }