SimpleMembershipProvider MinRequiredPasswordLength всегда возвращает 0, несмотря на то, что оно определено как 6 в разделе поставщика членства Web.config
-
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"]);
Решение
Я переключился на SimpleMembershipProvider в приложении ASP.NET MVC 4.
Эм, судя по соответствующему разделу, который вы показали в своем web.config, это совсем не так.Вы по-прежнему используете AspNetSqlMembershipProvider
.
Если вы хотите переключиться на Поставщик SimpleMembershipProvider убедитесь, что вы правильно настроили его:
<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>
Это не возымело никакого эффекта.Я нахожу секрет в МОДЕЛИ.Если вы создаете шаблон интернет-приложения, в 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; }
}
В свойстве Password есть StringLength->MinimumLength .Я думаю, что это так!
Некоторые функции, удаленные в SimpleMembershipProvider, смотрите здесь:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/
Надеюсь, это поможет вам.