2012-12-21 12 views
6

Obecnie piszę niestandardowego dostawcę członkostwa dla asp .net, a problem, który mam, polega na tym, że nie wiem jak podać parametry dostawcy niestandardowego członkostwa w w ten sam sposób, w jaki podajesz standardowym dostawcom członkostwa ASP.NET w pliku web.config, np. długość hasła.Asp .Net Niestandardowe parametry członkostwa z web.config

Odpowiedz

5

Kiedy czerpią swoją klasę z MembershipProvider trzeba zastąpić metodę Initialize(), ma następujący podpis:

public override void Initialize(string name, NameValueCollection config); 

System.Collections.NameValueCollection jest słownikiem, gdzie można znaleźć opcje zapisane w pliku web.config. Opcje te są podane w ten sam sposób, w jaki określasz opcje dla "standardowych" dostawców (jako atrybuty). Każda pozycja w słowniku ma klucz nazwy atrybutu i wartość atrybutu (jako string).

public class MyMembershipProvider : MembershipProvider 
{ 
    public override void Initialize(string name, NameValueCollection config) 
    { 
     base.Initialize(name, config); 

     _enablePasswordReset = config.GetBoolean("enablePasswordReset", true); 
    } 
} 

Jeżeli w moim przykładzie GetBoolean() jest metoda rozszerzenie ogłoszony gdzieś następująco:

public static bool GetBoolean(this NameValueCollection config, 
    string valueName, bool? defaultValue) 
{ 
    object obj = config[valueName]; 
    if (obj == null) 
    { 
     if (!defaultValue.HasValue) 
      throw new WarningException("Required field has not been specified."); 

     return defaultValue.Value; 
    } 

    bool value = defaultValue; 
    if (obj is Boolean) 
     return (bool)obj; 

    IConvertible convertible = obj as IConvertible; 
    try 
    { 
     return convertible.ToBoolean(CultureInfo.InvariantCulture); 
    } 
    catch (Exception) 
    { 
     if (!defaultValue.HasValue) 
      throw new WarningException("Required field has invalid format."); 

     return defaultValue.Value; 
    } 
} 
+1

To jest dokładnie tak, jak robiłem to w przeszłości, po wywołaniu "base.Initialize" wypełnij pozostałe wartości konfiguracyjne, ustawiając odpowiednie ustawienia domyślne lub wyrzucając wyjątki, jeśli jest to konieczne dla brakujących parametrów obowiązkowych. –

2

Jeśli Twój dostawca wywodzi się z MembershipProvider : ProviderBase niż cała konfiguracja, należy załadować i zastosować formularz web.config.

Rozważ implementację niestandardowych IPrincipal i/lub IIdentity - czasami jest to lepszy punkt rozszerzenia, a ponieważ nie każdy jest tego świadomy, często nie jest używany.

1

W ten sam sposób można zdefiniować standardowe członkostwa .net:

<membership defaultProvider="MyCustomMembershipProvider" userIsOnlineTimeWindow="30"> 
       <providers> 
        <clear /> 
        <add name="MyCustomMembershipProvider" type="Namespace.MyCustomMembershipProvider" connectionStringName="db_ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="false" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" /> 
        <add name="StandardMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="db_ConnectionString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/" /> 
       </providers> 
    </membership>