3

在 MVC 4 中使用 SimpleMembershipProvider 访问 pages_Membership 表信息的最佳方法是什么?如果他/她输入错误的密码三次,我正在尝试实施帐户阻止..

非常感谢

4

2 回答 2

7

使用 SimpleMembership,您将使用以下方法访问此信息:

WebSecurity.IsAccountLockedOut(userName, allowedPasswordAttempts, intervalInSeconds)

IsAccountLockedOut 根据您希望允许的尝试次数和自上次登录尝试失败以来的时间返回帐户是否被锁定。这用于阻止其他机器暴力破解密码的尝试。您将在验证用户身份的位置添加此检查,例如帐户控制器登录方法。你可以这样做:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && 
           !WebSecurity.IsAccountLockedOut(model.UserName, 3, 180) &&
           WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
        {
            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }

在这种情况下,您不希望完全禁用用户并允许有效用户在间隔过后重新进入。这是为了阻止暴力攻击,而不是忘记密码的人。

IsConfirmed字段在注册期间使用,您希望用户确认他们为您提供了有效的电子邮件地址您将在数据库中生成并存储一个ConfirmationToken,您将通过电子邮件发送给用户并指示他们单击一个链接,该链接会将他们带到 MVC 应用程序中的控制器/操作,该控制器/操作将验证令牌并将IsConfirmed字段设置为 true .

于 2013-01-21T14:27:20.927 回答
1

大卫,要完全禁用用户,您可以创建一个新角色“禁用”并修改登录代码:

public ActionResult Login(LoginModel model, string returnUrl)
{
    string errorMsg = "The user name or password provided is incorrect.";
    if (Roles.IsUserInRole(model.UserName, "Disabled"))
    {
        errorMsg = "Your account has been disabled. Contact webmaster for more info.";
    }
    else if (ModelState.IsValid &&
        !WebSecurity.IsAccountLockedOut(model.UserName, 3, 180) &&
        WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
            return RedirectToLocal(returnUrl);
    }

    if (!WebSecurity.IsConfirmed(model.UserName))
    {
        errorMsg = "You have not completed the registration process. "
            + "To complete this process look for the email that provides instructions.";
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", errorMsg);
    return View(model);
}
于 2013-08-02T21:24:03.780 回答