SimpleMembershipProvider MinRequiredPasswordLength sempre retorna 0, apesar de ser definido como 6 na seção do provedor de associação Web.config
-
12-12-2019 - |
Pergunta
eu mudei para SimpleMembershipProvider
em um aplicativo ASP.NET MVC 4.Todo o resto está funcionando muito bem, mas há esse problema ...
Quando tento este código:
var password = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);
MinRequiredPasswordLength
é sempre 0.As configurações definidas no provedor de associação Web.config
seção não estão sendo lidas.
Este é o provedor padrão de associação Web.config
seção:
<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>
Aqui estão as informações de depuração que recebo:
Alguma dica?
É o SimpleMembershipProvider
tão simples que nem usa a seção Web.config?
Solução para o momento
Para superar o SimpleMembershipProvider
limitação atual, usei este código para pegar o valor definido em 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"]);
Solução
Mudei para SimpleMembershipProvider em um aplicativo ASP.NET MVC 4.
Erm, na seção relevante que você mostrou em seu web.config, este não parece ser o caso.Você ainda está usando o AspNetSqlMembershipProvider
.
Se você quiser mudar para o SimpleMembershipProvider certifique-se de que você o configurou corretamente:
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
/>
</providers>
</membership>
Dito isto, o SimpleMembershipProvider não suporta a configuração dessas propriedades via web.config.Nem sequer usa.Se você quiser essa funcionalidade, terá que implementá-la sozinho.
Outras dicas
Você pode herdar de SimpleMembershipProvider
e substituir 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;
}
}
}
Descobri que se colocasse minRequiredPasswordLength="3" em web.config, assim:
<membership defaultProvider="SimpleMembershipProvider" >
<providers>
<clear/>
<add name="SimpleMembershipProvider"
type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"
minRequiredPasswordLength="3"
/>
</providers>
</membership>
Isso não tem efeito.Encontro o segredo em MODEL. Se você criar um modelo de aplicação para Internet, em AccountModels.cs existe um "RegisterModel", assim:
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; }
}
Na propriedade Password tem um StringLength->MinimumLength .Eu acho que é isso!
Alguns recursos removidos no SimpleMembershipProvider, veja aqui:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/
Espero que isso ajude você.