更改 AspNetMembershipProvider 中的 MaxInvalidPasswordAttempts

Change MaxInvalidPasswordAttempts in AspNetMembershipProvider

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

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

我正在使用AspNetSqlMembershipProvider

我该如何实施?

您无法在自定义 class 派生的当前上下文中轻松设置默认 MaxInvalidPasswordAttempts by assigning values to that property, since MaxInvalidPasswordAttempts is getter property. To set its value, you need to override that property and includes 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 中,注册上面创建的自定义 class 的完全限定名称(包括其命名空间)以替换默认值 SqlMembershipProvider:

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