SimpleMembershipProvider MinRequiredPasswordLength siempre devuelve 0 a pesar de estar definido como 6 en la sección del proveedor de membresía de Web.config
-
12-12-2019 - |
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:
¿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"]);
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.