SimpleMembershipProvider MinRequiredPasswordLength всегда возвращает 0, несмотря на то, что оно определено как 6 в разделе поставщика членства Web.config

StackOverflow https://stackoverflow.com//questions/12702649

Вопрос

Я переключился на 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>

Вот отладочная информация, которую я получаю:

enter image description here

Какие-нибудь намеки?

Это 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/

Надеюсь, это поможет вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top