SimpleMembershipProvider MinRequiredPasswordLength 始终返回 0,尽管它在 Web.config 成员资格提供程序部分中定义为 6
-
12-12-2019 - |
题
我切换到 SimpleMembershipProvider
在 ASP.NET MVC 4 应用程序中。其他一切都很好,但有一个问题......
当我尝试这段代码时:
var password = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);
MinRequiredPasswordLength
始终为 0。会员资格提供商中定义的设置 Web.config
部分未被阅读。
这是会员默认提供商 Web.config
部分:
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="DefaultConnection"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/Acad" />
</providers>
</membership>
这是我得到的调试信息:
有什么提示吗?
是个 SimpleMembershipProvider
如此简单以至于它甚至不使用 Web.config 部分?
暂时的解决方案
为了克服 SimpleMembershipProvider
目前的限制,我用过 这段代码 获取定义在中的值 Web.config
:
MembershipSection membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");
var defaultProvider = membershipSection.DefaultProvider;
ProviderSettings providerSettings = membershipSection.Providers[defaultProvider];
var minRequiredPasswordLength = int.Parse(providerSettings.Parameters["minRequiredPasswordLength"]);
解决方案
我在 ASP.NET MVC 4 应用程序中切换到 SimpleMembershipProvider。
嗯,从您在 web.config 中显示的相关部分来看,情况似乎根本不是这样。您仍在使用 AspNetSqlMembershipProvider
.
如果您想切换到 简单会员提供者 确保您已正确配置它:
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
/>
</providers>
</membership>
也就是说,SimpleMembershipProvider 不支持通过 web.config 设置这些属性。它甚至不使用它。如果您想要这样的功能,您必须自己实现。
其他提示
您可以继承自 SimpleMembershipProvider
并覆盖 MinRequiredPasswordLength
:
public class YoursSimpleMembershipProvider : SimpleMembershipProvider
{
private const int MIN_REQUIRED_PASSWORD_LENGTH = 6;
private const int MIN_REQUIRED_NON_ALPHANUMERIC_CHARACTERS = 0;
public override int MinRequiredPasswordLength
{
get
{
return MIN_REQUIRED_PASSWORD_LENGTH;
}
}
}
我发现如果我将 minRequiredPasswordLength="3" 放入 web.config 中,如下所示:
<membership defaultProvider="SimpleMembershipProvider" >
<providers>
<clear/>
<add name="SimpleMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"
minRequiredPasswordLength="3"
/>
</providers>
</membership>
那没有效果。我在MODEL中找到了秘密。如果你创建一个互联网应用程序模板,在AccountModels.cs中有一个“RegisterModel”,就像这样:
public class RegisterModel
{
[Required]
[Display(Name = "用户名")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "确认密码")]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
public string ConfirmPassword { get; set; }
}
在密码属性中有一个 StringLength->MinimumLength 。我认为是这样!
SimpleMembershipProvider 中删除了一些功能,请参见此处:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/
希望这对您有帮助。