SimpleMembershipProvider:webpages_Membership表

时间:2013-01-21 13:34:34

标签: asp.net-mvc-4 asp.net-membership membership-provider simplemembership

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

非常感谢

2 个答案:

答案 0 :(得分:6)

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

WebSecurity.IsAccountLockedOut(userName, allowedPasswordAttempts, intervalInSeconds)

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

    [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。

答案 1 :(得分:1)

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

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);
}