【问题标题】:Change MaxInvalidPasswordAttempts in AspNetMembershipProvider更改 AspNetMembershipProvider 中的 MaxInvalidPasswordAttempts
【发布时间】:2018-02-22 14:53:41
【问题描述】:
我想根据用户角色更改MaxInvalidPasswordAttempts 的值。
举个例子:
If user=="Admin" then MaxInvalidPasswordAttempts =1
If user=="SupervisoR" then MaxInvalidPasswordAttempts =5
我正在使用AspNetSqlMembershipProvider。
我该如何实现?
【问题讨论】:
标签:
asp.net-mvc
webforms
asp.net-membership
【解决方案1】:
您不能通过为该属性赋值来轻松设置默认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>