Skip to main content

Birden Fazla MembershipProvider ve RoleProvider Kullanımı

Yaklaşık 1.5 yıl önce bana gelen bir mailde aynı projede iki farklı Membership provider kullanmak gibi bir ihtiyaçtan bahsedilmişti. Ben içimden “ne gerek var ki böyle birşeye” derken soruyu soran arkadaşa çözümü iletmiştim. Kısa bir süre önce geliştirdiğimiz bir projede tam olarak böyle bir durumla karşılaştık ve aynı projede iki farklı veri kaynağından beslenen Membership ve Role provider’a ihtiyaç duyduk. Böyle bir ihtiyaç duymanız durumunda aşağıdaki iki adımı takip ettiğinizde birden fazla provider’ı kolaylıkla projenizde kullanabilirsiniz.

İlk olarak config dosyamızda Membership tanımlamalarını yapıyoruz(Role ve Profile için de aynı kullanımlar geçerlidir)

<membership defaultProvider="Provider1">
  <providers>
    <clear/>
    <add name="Provider1" type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="Provider1ConStr" enablePasswordRetrieval="false"
        enablePasswordReset="true" requiresQuestionAndAnswer="false"
        applicationName="App1" requiresUniqueEmail="false" passwordFormat="Hashed"
        maxInvalidPasswordAttempts="10" minRequiredPasswordLength="6"
        minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"/>
    <add name="Provider2" type="System.Web.Security.SqlMembershipProvider" connectionStringName="Provider2ConStr"
        enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
        maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
        applicationName="/" />
  </providers>
</membership>

Provider1 ve Provider2 adında iki farklı tanımlama yaptık. Uygulamanızda doğrudan Login kontrollerini veya Membership sınıfına ait üyeleri kullanarak metot çağırımları(ör: Membership.CreateUser() gibi) yapacak olursanız doğal olarak defaultProvider’da belirttiğimiz Provider1 kullanılacaktır. Peki Provider2’de tanımladığımız provider’ı kullanmak için nasıl bir yol izlememiz gerekiyor?

Kod tarafında erişim yaparken Membership.ValidateUser metodunu doğrudan çağırırsanız varsayılan provider tanımı kullanılacaktır. Eğer diğer provider’ı kullanmak isterseniz aşağıdaki kullanım şeklini uygulamanız gerekecek;

MembershipProvider provider = Membership.Providers["Provider2"];
if (provider.ValidateUser(username, password))
{
    //login oldu
}
else
{
    //hatali kullanici adi veya sifre
}

Farklı provider tanımını login kontrollerinde de kolayca kullanabilmekteyiz. Login kontrollerinde yer alan MembershipProvider özelliği bu atamanın yapılacağı yer:

<asp:Login ID="Login1" runat="server" MembershipProvider="Provider2"></asp:Login>
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" MembershipProvider="Provider2">
    ...
</asp:CreateUserWizard>

Birden Fazla MembershipProvider ve RoleProvider Kullanımı” hakkında 3 yorum

  1. Teşekkürler hocam. Böyle sade ve yazması kolay olan, ama biz geliştiricilerin de işine yarar ipuçlarına denk geldikçe yazmaya çalışıyorum hocam, ama 2012 yılındaki yoğunluğumu az çok biliyorsunuz, ne düşünmeye ne yazmaya zaman kalıyor. Bakalım bundan sonra daha fazla zaman bulursam yazabilirim umarım :)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir