【发布时间】:2018-10-15 00:36:36
【问题描述】:
我有一个使用 asp.net 身份验证功能的登录名,如果用户多次输入错误的密码,则会将用户锁定在系统之外。
当用户输入错误的密码时,[AccessFailedCount] 字段按预期每次递增 1(在 dbo.AspNetUsers 表中)。
但是,在他们最后一次尝试(比如第 5 次)时,在错误消息显示在屏幕上以向用户显示他们已被锁定之前,[AccessFailedCount] 重置回 0,这使我无法看到该用户多少次帐号登录失败。
被命中的代码块如下:
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, true);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
var lockoutMessage = WebConfigurationManager.AppSettings["LockoutMessage"];
ModelState.AddModelError("", lockoutMessage);
return View(model);
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Please check your credentials and try again.");
// Incorrect login info.
return View(model);
}
当用户输入错误的密码时,“Failure”案例被命中 4 次,然后“LockedOut”案例被命中,[AccessFailedCount] 被重置为 0。
这似乎发生在 PasswordSignInAsync 方法的某个地方,因为在遇到案例之前计数已经设置为 0。
有没有办法(完全)防止这种行为发生?我会怀疑如果有的话,[AccessFailedCount] 字段只有在用户成功登录时才应重置,但即使用户收到错误消息说他们在设定的时间段内无法登录,它也会重置。
它看起来像是 asp.net 身份验证功能的内置功能,但我不确定如何防止 [AccessFailedCount] 字段被重置。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-identity