在AspNetMembershipProvider中更改MaxInvalidPasswordAttempts

时间:2018-02-22 14:53:41

标签: asp.net-mvc webforms asp.net-membership

我想根据用户角色更改MaxInvalidPasswordAttempts的值。 举个例子:

If user=="Admin" then MaxInvalidPasswordAttempts =1 
If user=="SupervisoR" then MaxInvalidPasswordAttempts =5

我正在使用AspNetSqlMembershipProvider

我该如何实现?

1 个答案:

答案 0 :(得分:0)

您无法通过为该属性分配值来轻松设置默认MaxInvalidPasswordAttempts,因为MaxInvalidPasswordAttempts getter 属性。要设置其值,您需要覆盖该属性,并在派生的自定义类中包含当前上下文中的User.IsInRole方法  来自SqlMembershipProvider,如下例所示:

public class CustomMembershipProvider : SqlMembershipProvider
{
    public override int MaxInvalidPasswordAttempts
    {
        get
        {
            if (HttpContext.Current.User.IsInRole("Admin"))
            {
                return 1; // example value
            }
            else if (HttpContext.Current.User.IsInRole("Supervisor"))
            {
                return 5; // example value
            }

            // define other roles here

            else
            {
                // use default if no roles provided
                return base.MaxInvalidPasswordAttempts;
            }
        }
    }
}

然后在web.config中,注册上面创建的自定义类的完全限定名称(包括其名称空间)以替换默认SqlMembershipProvider

<membership ...>
   <providers>
     <add name="SqlProvider" 
          type="YourProjectNamespace.CustomMembershipProvider" ... />
   </providers>
</membership>