SimpleMembershipProvider MinRequiredPasswordLength siempre devuelve 0 a pesar de estar definido como 6 en la sección del proveedor de membresía de Web.config

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

Pregunta

me cambié a SimpleMembershipProvider en una aplicación ASP.NET MVC 4.Todo lo demás funciona muy bien, pero existe este problema...

Cuando pruebo este código:

var password = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);

MinRequiredPasswordLength siempre es 0.La configuración definida en el proveedor de membresía Web.config sección no se están leyendo.

Aquí está el proveedor predeterminado de membresía Web.config sección:

<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>

Aquí está la información de depuración que obtengo:

enter image description here

¿Alguna pista?

Es el SimpleMembershipProvider ¿Tan simple que ni siquiera usa la sección Web.config?

Solución por el momento

para superar el SimpleMembershipProvider limitación actual, usé este codigo para tomar el valor definido en 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"]);
¿Fue útil?

Solución

Cambié a SimpleMembershipProvider en una aplicación ASP.NET MVC 4.

Erm, según la sección relevante que ha mostrado en su web.config, este no parece ser el caso en absoluto.Todavía estás usando el AspNetSqlMembershipProvider.

Si desea cambiar al Proveedor de membresía simple asegúrese de haberlo configurado correctamente:

<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider"
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
    />
  </providers>
</membership>

Dicho esto, SimpleMembershipProvider no admite la configuración de esas propiedades a través de web.config.Ni siquiera lo usa.Si desea dicha funcionalidad, tendrá que implementarla usted mismo.

Otros consejos

Puedes heredar de SimpleMembershipProvider y anular 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;
        }
    }
}

Encontré que si pongo minRequiredPasswordLength="3" en web.config, así:

<membership defaultProvider="SimpleMembershipProvider" >
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"
         minRequiredPasswordLength="3"
    />
  </providers>     
</membership>

Eso no tiene efecto.Encuentro el secreto en MODEL. Si crea una plantilla de aplicación de Internet, en AccountModels.cs hay un "RegisterModel", como este:

    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; }
    }

En la propiedad Contraseña tiene StringLength->MinimumLength .¡Creo que eso es!

Algunas funciones eliminadas en SimpleMembershipProvider, consulte aquí:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/

Espero que esto te ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top