Makale Özeti

Bir önceki makalemizde ASP.Net Membership kontrollerini varsayılan ayarlarıyla yani arka planla SQL Server 2005 Express Edition kullanarak nasıl konfigure edebileceğimizden bahsetmiştik...

Makale

Bir önceki makalemizde ASP.Net Membership kontrollerini varsayılan ayarlarıyla yani arka planla SQL Server 2005 Express Edition kullanarak nasıl konfigure edebileceğimizden bahsetmiştik.

Ve yine bu makalede belirttiğimiz gibi ASP.Net Membership kontrollerini kendi veritabanımız ile kullanmak istediğimizde küçük bir problem ile karşı karşıya olacağımızı belirtmiştik. İşte bu yazımızda Access veya Oracle için nasıl membership provider ı yazabiliriz bundan bahsediyor olacağız.

Aslında temelde işimiz oldukça basit, çünkü .Net Framework 2.0 içerisinde işimizi oldukça kolaylaştıran bir sınıf kütüphanesi var: MEMBERSHIP

Bu kütüphaneden miraz almak suretiyle tamamı override edilebilir(yeniden kodlanabilir) metodlara ulaşmış olacağız. Bu sayede tüm metodlar için kendi login kodlarımızı yazabilecek durumdayız. Bunun haricinde yapmanız gerekn bir diğer şey ise uygulamanızın web.config dosyası içerisine hangi provider ı kullanacağınıza dair bilgileri yazmak, zira unutmayınki default olarak SQL Express Edition provider ını kullanmayı isteyecektir.

IIS üzerinde çalışan yeni bir web uygulaması yaratıyoruz. Ve bu uygulama içerisine de yeni bir class dosyası şüphesiz.

Hemen ardından kendimize özgü istediğimiz özelliklerde bir access tablosu hazırlıyorum.



Yaratcağımız yeni Provider class'ımız aşağıdaki kodlardan ibaret olacak. MembershipProvider class ından miras aldığımız için tüm override edilebilir (yeniden kodlanabilir) metodlar sizin için otomatik olarak yaratılacak ve artık bu metodlara istediğiniz kodlamayı yapabilirsiniz.

 
Inherits MembershipProvider

      Private connstr As String
      Private comm As New OleDbCommand

      Private _requiresQuestionAndAnswer As Boolean
      Private _minRequiredPasswordLength As Integer

Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
      If config("requiresQuestionAnswer") = True Then
            _requiresQuestionAndAnswer = True
      End If

      connstr = config("connectionString")
      MyBase.Initialize(name, config)
End Sub

Public Overrides Function CreateUser(ByVal username As String, ByVal password As String, ByVal email As String, ByVal passwordQuestion As String, ByVal passwordAnswer As String, ByVal isApproved As Boolean, ByVal providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
      Dim MyConn As New OleDbConnection(connstr)

      'Try
            MyConn.Open()
            Dim sql As String = "INSERT INTO KULLANICI(KAdi, Sifre, EMail) Values(@username, @password, @email)"

            Dim MyComm As New OleDbCommand(sql, MyConn)
            MyComm.Parameters.Add("@username", username)
            MyComm.Parameters.Add("@password", password)
            MyComm.Parameters.Add("@email", email)

            Dim result As Integer = MyComm.ExecuteNonQuery()
            MyConn.Close()

            status = MembershipCreateStatus.Success
            Dim user As New MembershipUser("OracleMembershipProvider", username, Nothing, email, Nothing, Nothing, True, False, Now, Nothing, Nothing, Nothing, Nothing)
            Return user
      'Catch ex As Exception
            'status = MembershipCreateStatus.UserRejected
            'Return Nothing
      'End Try

End Function

Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
      Dim MyConn As New OleDbConnection(connstr)

      Try
            MyConn.Open()
            Dim sql As String = "Select * from KULLANICI Where KAdi = @username And Sifre = @password"

            Dim MyComm As New OleDbCommand(sql, MyConn)

            MyComm.Parameters.Add("@username", username)
            MyComm.Parameters.Add("@password", password)

            Dim MyReader As OleDbDataReader = MyComm.ExecuteReader()

            If MyReader.HasRows Then
                  Return True
            Else
                  Return False
            End If

            MyConn.Close()
      Catch ex As Exception
            Return False
      End Try

End Function


Buraya kadar olan kısımda kendi provider ımız için Login ve Create User Wizard kodlarını yazmış olduk. Geri kalan metodları da kendi isteğinize göre yazabilme şansına sahipsiniz. Şimdi uygulamamızı kullanıma açalım yani Login ve Create User sayfalarımızı tasarlayalım.





Ve bakalım yeni kullanıcımız kaydedilmiş mi?




Evren AYAN
Microsoft MVP - Connected System Developer
http://www.evrenayan.net