SimpleMembershipProvider MinRequiredPasswordLength renvoie toujours 0 bien qu'il soit défini comme 6 dans la section du fournisseur d'adhésion Web.config

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

Question

Je suis passé à SimpleMembershipProvider dans une application ASP.NET MVC 4.Tout le reste fonctionne très bien mais il y a ce problème...

Quand j'essaye ce code :

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

MinRequiredPasswordLength est toujours 0.Les paramètres définis dans le fournisseur d'adhésion Web.config section ne sont pas lues.

Voici le fournisseur d'adhésion par défaut Web.config section:

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

Voici les informations de débogage que je reçois :

enter image description here

Des indices ?

Est le SimpleMembershipProvider si simple qu'il n'utilise même pas la section Web.config ?

Solution pour le moment

Pour surmonter le SimpleMembershipProvider limitation actuelle, j'ai utilisé ce code pour récupérer la valeur définie dans 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"]);
Était-ce utile?

La solution

Je suis passé à SimpleMembershipProvider dans une application ASP.NET MVC 4.

Euh, d'après la section pertinente que vous avez affichée dans votre web.config, cela ne semble pas du tout être le cas.Vous utilisez toujours le AspNetSqlMembershipProvider.

Si vous souhaitez passer au SimpleMembershipProvider assurez-vous de l'avoir correctement configuré :

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

Cela étant dit, SimpleMembershipProvider ne prend pas en charge la définition de ces propriétés via web.config.Il ne l'utilise même pas.Si vous souhaitez une telle fonctionnalité, vous devrez la mettre en œuvre vous-même.

Autres conseils

Vous pouvez hériter de SimpleMembershipProvider et remplacer 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;
        }
    }
}

J'ai trouvé si je mets minRequiredPasswordLength="3" dans web.config, comme ceci :

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

Cela n'a aucun effet.Je trouve le secret dans MODEL. Si vous créez un modèle d'application Internet, dans AccountModels.cs il y a un "RegisterModel", comme ceci :

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

Dans la propriété Mot de passe, il y a un StringLength->MinimumLength .Je crois que c'est!

Certaines fonctionnalités supprimées dans SimpleMembershipProvider, voir ici :http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top