[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public
async Task<ActionResult> Login(LoginViewModel model,
string
returnUrl)
{
if
(ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if
(user !=
null
)
{
var validCredentials = await UserManager.FindAsync(model.Email, model.Password);
if
(await UserManager.IsLockedOutAsync(user.Id))
{
ModelState.AddModelError(
""
,
string
.Format(
"Your account has been locked out for {0} minutes due to multiple failed login attempts."
, ConfigurationManager.AppSettings[
"DefaultAccountLockoutTimeSpan"
].ToString()));
}
else
if
(await UserManager.GetLockoutEnabledAsync(user.Id) && validCredentials ==
null
)
{
await UserManager.AccessFailedAsync(user.Id);
string
message;
if
(await UserManager.IsLockedOutAsync(user.Id))
{
message =
string
.Format(
"Your account has been locked out for {0} minutes due to multiple failed login attempts."
, ConfigurationManager.AppSettings[
"DefaultAccountLockoutTimeSpan"
].ToString());
}
else
{
int
accessFailedCount = await UserManager.GetAccessFailedCountAsync(user.Id);
int
attemptsLeft =
Convert.ToInt32(
ConfigurationManager.AppSettings[
"MaxFailedAccessAttemptsBeforeLockout"
].ToString()) -
accessFailedCount;
message =
string
.Format(
"Invalid credentials. You have {0} more attempt(s) before your account gets locked out."
, attemptsLeft);
}
ModelState.AddModelError(
""
, message);
}
else
if
(validCredentials ==
null
)
{
ModelState.AddModelError(
""
,
"Invalid credentials. Please try again."
);
}
else
{
await SignInAsync(user, model.RememberMe);
await UserManager.ResetAccessFailedCountAsync(user.Id);
return
RedirectToLocal(returnUrl);
}
}
}
return
View(model);
}