SimpleMembershipProvider MinRequiredPasswordLength gibt immer 0 zurück, obwohl es im Web.config-Mitgliedschaftsanbieterabschnitt als 6 definiert ist

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

Frage

Ich bin umgestiegen SimpleMembershipProvider in einer ASP.NET MVC 4-App.Alles andere funktioniert großartig, aber es gibt dieses Problem ...

Wenn ich diesen Code versuche:

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

MinRequiredPasswordLength ist immer 0.Die im Mitgliedschaftsanbieter definierten Einstellungen Web.config Abschnitt werden nicht gelesen.

Hier ist der Standardanbieter für die Mitgliedschaft Web.config Abschnitt:

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

Hier sind die Debug-Informationen, die ich bekomme:

enter image description here

Irgendwelche Hinweise?

Ist der SimpleMembershipProvider so einfach, dass nicht einmal der Abschnitt Web.config verwendet wird?

Lösung für den Moment

Um das zu überwinden SimpleMembershipProvider Strombegrenzung habe ich genutzt diesen Code um den in definierten Wert zu erfassen 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"]);
War es hilfreich?

Lösung

Ich bin in einer ASP.NET MVC 4-App zu SimpleMembershipProvider gewechselt.

Ähm, aus dem relevanten Abschnitt, den Sie in Ihrer web.config angezeigt haben, scheint dies überhaupt nicht der Fall zu sein.Sie verwenden weiterhin das AspNetSqlMembershipProvider.

Wenn Sie zum wechseln möchten SimpleMembershipProvider Stellen Sie sicher, dass Sie es richtig konfiguriert haben:

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

Allerdings unterstützt der SimpleMembershipProvider das Festlegen dieser Eigenschaften über web.config nicht.Es nutzt es nicht einmal.Wenn Sie eine solche Funktionalität wünschen, müssen Sie sie selbst implementieren.

Andere Tipps

Sie können von erben SimpleMembershipProvider und überschreiben 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;
        }
    }
}

Ich habe Folgendes gefunden, wenn ich minRequiredPasswordLength="3" in web.config eingefügt habe:

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

Das hat keine Auswirkung.Ich finde das Geheimnis in MODEL. Wenn Sie eine Internetanwendungsvorlage erstellen, gibt es in AccountModels.cs ein „RegisterModel“, genau so:

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

In der Password-Eigenschaft gibt es einen StringLength->MinimumLength .Ich denke, das ist!

Einige Funktionen wurden in SimpleMembershipProvider entfernt, siehe hier:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/

Ich hoffe, das hilft dir.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top