public async Task <ActionResult> Login(LoginViewModel model, string returnUrl) { var userLoginTrace = new UserLogTrace { DatePosted = DateTime.Now, IpAddress = IPAddressHelper.GetIpAddress(), IsLoggedSucceeded = false, PhoneNumber = model.UserName ?? "00000000000" }; if (!this.ModelState.IsValid) { var errors = ModelState.Values.SelectMany(state => state.Errors).ToList(); foreach (var error in errors) { this.ModelState.AddModelError(string.Empty, error.ErrorMessage); } this.Data.UserLogTrace.Add(userLoginTrace); this.Data.SaveChanges(); return(this.View(model)); } // transform string value to bool value var isRememberMe = string.Compare(model.RememberMe, "on", StringComparison.OrdinalIgnoreCase) == 0; // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, change to shouldLockout: true var result = await this.SignInManager.PasswordSignInAsync(model.UserName, model.Password, isRememberMe, false); if (result == SignInStatus.Success) { userLoginTrace.IsLoggedSucceeded = true; } this.Data.UserLogTrace.Add(userLoginTrace); this.Data.SaveChanges(); switch (result) { case SignInStatus.Success: return(this.RedirectToLocal(returnUrl)); case SignInStatus.LockedOut: return(this.View("Lockout")); case SignInStatus.RequiresVerification: return(this.RedirectToAction("SendCode", new { ReturnUrl = returnUrl, model.RememberMe })); case SignInStatus.Failure: default: this.ModelState.AddModelError(string.Empty, Resources.Resources.InvalidLoginAttempt); return(this.View(model)); } }