ASP.NET Identity 2.0故障计数未递增

vfwfrxfs  于 11个月前  发布在  .NET
关注(0)|答案(4)|浏览(150)

昨晚我正在使用FormsAuthentication进行一个新项目,并正在自定义票证以包含安全令牌,因此如果用户在一个浏览器中注销,则会在所有浏览器中注销。在查看www.example.com Identity的最新版本时,它看起来已经内置了此功能。
我创建了一个新的测试MVC 5 Web应用程序,启用了个人帐户。注册和身份验证开箱即用。
然而,我注意到失败的登录尝试并没有增加AspNetUsers表中的登录失败计数字段。由于这不是递增的,我可以尝试任意次数的失败登录尝试,而不会锁定帐户。
如何在www.example.com Identity 2.0上启用“失败计数”和“锁定”功能?

h4cxqtbf

h4cxqtbf1#

CheckPassword方法调用PasswordHasher.VerifyHashedPassword方法来验证密码,但是当提供的密码与现有密码不匹配时,它不会更新访问失败计数。
下面是一个支持锁定的authenticate方法的示例:

UserManager<User> userManager = new UserManager<User>(new UserStore());

if (userManager.SupportsUserLockout && userManager.IsLockedOut(userId))
    return;

var user = userManager.FindById(userId);
if (userManager.CheckPassword(user, password))
{
    if (userManager.SupportsUserLockout && userManager.GetAccessFailedCount(userId) > 0)
    {
        userManager.ResetAccessFailedCount(userId);
    }

    // Authenticate user
}
else
{
    if (userManager.SupportsUserLockout && userManager.GetLockoutEnabled(userId))
    {
        userManager.AccessFailed(userId);
    }
}

字符串

cgh8pdjw

cgh8pdjw2#

还有一个PasswordSignInAsync,它接受一个“shouldLockout”参数。

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);

字符串

myzjeezk

myzjeezk3#

对于.NET Core 2.1,shouldLockout 现在命名为 *lockoutOnFailure *
因此,您的登录调用应该如下所示,以增加失败的登录尝试:

var result = await SignInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, loginModel.RememberMe, lockoutOnFailure: true);

字符串
一旦用户成功登录,这也将重置失败的登录尝试。

ecfsfe2w

ecfsfe2w4#

尝试登入失败后,应使用

await UserManager.AccessFailedAsync(user);

字符串

此代码会增加失败计数

相关问题