Di ASP.NET 2.0, fungsi penyedia keanggotaan yang baru ditambahkan, dikombinasikan dengan serangkaian kontrol login dan registrasi yang kuat, dapat dengan mudah mengelola login dan izin pengguna (lihat << Pengenalan kontrol login ASP.NET 2.0 >>).
Namun, Anda mungkin menemukan bahwa kontrol login dan fungsi manajemen keanggotaan yang disertakan dengan ASP.NET 2.0 digunakan dengan SQL Server 2005 Express secara default. Jadi, bagaimana cara mengubahnya untuk menggunakan SQL Server 2000 atau sumber data lainnya, seperti akses , ramalan, dll.? Jika Anda ingin menulis ulang aplikasi untuk mengelola pengguna yang masuk atau izin pengguna di aplikasi Anda, bagaimana cara memodifikasinya? Pada artikel ini, kami akan menunjukkan cara menggunakan penyedia khusus di ASP.NET 2.0 untuk bekerja sama dengan kontrol login guna mengimplementasikan proses login sederhana.
Untuk memahami cara kerja penyedia di ASP.NET 2.0, pertama-tama lihat diagram struktur berikut:
Nama Bidang Tipe Data Ukuran Bidang Nama pengguna (kunci) Teks 8 Teks Kata Sandi 8 Teks Email 50 kata sandiPertanyaan Teks 50 kata sandiTeks Jawaban 50 |
Penyedia Keanggotaan ModifiedSql Kelas Publik Mewarisi SqlMembershipProvider Fungsi Penggantian Publik CreateUser (...) ... Fungsi Akhir ... Kelas Akhir |
Jika Anda tidak ingin menggunakan SqlMembershipProvider yang disediakan di Visual Studio 2005 beta 2, Anda hanya perlu mendeklarasikan kelas Anda sendiri dan mewarisi kelas MembershipProvider. Kelas MembershipProvider berisi metode dan properti terkait keanggotaan.
Di Solution Explorer, gunakan "Tambahkan item baru.." untuk menambahkan kelas, beri nama AccessMembershipProvider.vb, dan ikuti petunjuk sistem untuk menempatkannya di direktori App_Code.
Selanjutnya, referensikan namespace yang relevan dan tulis kerangka program sebagai berikut:
Impor Microsoft.VisualBasic
Mengimpor System.Data
Public Class AccessMembershipProvider
Mewarisi Penyedia Keanggotaan
Untuk menggunakan penyedia khusus,
Kelas Akhir
harus membuat konfigurasi yang relevan di web.config.Anda dapat menambahkan file web.config baru dan menulis kode berikut:
<system.web>
<mode autentikasi="Formulir"/>
<keanggotaan
defaultProvider="AccessMembershipProvider" >
<penyedia>
<tambahkan nama="AccessMembershipProvider"
ketik = "Penyedia Keanggotaan Akses"
membutuhkanQuestionAndAnswer="benar"
connectionString="Penyedia=Microsoft.Jet.
OLEDB.4.0;Sumber Data=C:NewMembershipProvider
App_DataMembers.mdb;Keamanan Tetap
Info=Salah" />
</penyedia>
</keanggotaan>
</system.web>
Diantaranya, harap perhatikan poin-poin berikut:
metode otentikasi harus dipilih sebagai "Formulir" (authentication mode="forms").
Dengan menggunakan tag <add>, tambahkan penyedia khusus bernama AccessMembershipProvider .
Atribut requireQuestionAndAnswer, bila nilainya benar, menunjukkan bahwa pada saat pendaftaran baru, pertanyaan cepat dan jawaban yang harus dijawab harus diisi.
ConnectionString, menunjukkan string koneksi untuk terhubung ke database.
Atribut DefaultProvider menunjukkan penyedia mana yang digunakan sistem secara default, karena beberapa penyedia dapat diatur dalam suatu sistem.
Di AccessMembershipProvider.vb, tambahkan anggota pribadi berikut
Private connStr As String
Komunikasi pribadi Sebagai OleDb.OleDbCommand Baru
Pribadi _requiresQuestionAndAnswer Sebagai Boolean
Private _minRequiredPasswordLength Sebagai Integer
dan menambahkan metode Initialize(), kodenya adalah sebagai berikut
Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
'===mengambil nilai atribut yang ditetapkan di
'web.config dan tetapkan ke variabel lokal===
Jika config("requiresQuestionAndAnswer") = "benar" Maka _
_requiresQuestionAndAnswer = Benar
koneksiStr = config("koneksiString")
MyBase.Inisialisasi(nama, konfigurasi)
End SubKetika
penyedia dimuat, metode Initialize() akan dipanggil. Pada file web.config tadi, berbagai nilai atribut yang disetel menggunakan tag <add> dapat dibaca dengan metode ini. Misalnya, dapat dibaca dengan menggunakan parameter config. Pada kode di atas, config("connectionString") digunakan untuk membaca string koneksi database dan memasukkannya ke dalam variabel connStr. Setelah itu, atur properti RequiresQuestionAndAnswer sebagai berikut:
Public Overrides ReadOnly Property _
MemerlukanQuestionAndAnswer() _
Sebagai Boolean
Mendapatkan
Jika _requiresQuestionAndAnswer = Benar Maka
Kembali Benar
Kalau tidak
Kembali Salah
Akhiri Jika
Akhir Dapatkan
Properti Akhir
Perhatikan bahwa nilai properti ini harus ditetapkan, jika tidak, dalam kontrol CreateUserWizard, dua kotak teks pertanyaan cepat kata sandi dan jawaban cepat kata sandi tidak akan ditampilkan.
Selanjutnya, kita dapat mulai menulis kode untuk membuat pengguna baru. Kode metode CreateUser() adalah sebagai berikut:
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 Disetujui Sebagai Boolean, ByVal penyediaUserKey Sebagai Objek, status ByRef Sebagai System.Web.Security.MembershipCreateStatus) Sebagai System.Web.Security.MembershipUser
Redupkan sambungan Sebagai OleDb.OleDbConnection Baru (sambunganStr)
Mencoba
samb.Buka()
Redupkan sql As String = "MASUKKAN KE NILAI Keanggotaan (" & _
"@nama pengguna, @kata sandi, @email, " & _
" @passwordQuestion, @passwordAnswer )"
Redupkan komunikasi Sebagai OleDb.OleDbCommand Baru(sql, samb.)
comm.Parameters.AddWithValue("@nama pengguna", nama pengguna)
comm.Parameters.AddWithValue("@kata sandi", kata sandi)
comm.Parameters.AddWithValue("@email", email)
comm.Parameters.AddWithValue("@passwordQuestion", passwordQuestion)
comm.Parameters.AddWithValue("@passwordAnswer", passwordAnswer)
Redupkan hasil Sebagai Integer = comm.ExecuteNonQuery()
samb.Tutup()
status = MembershipCreateStatus.Sukses
Redupkan pengguna Sebagai Pengguna Keanggotaan Baru("AccessMembershipProvider", nama pengguna, Tidak Ada, email, kata sandiPertanyaan, Tidak Ada, Benar, Salah, Sekarang, Tidak Ada, Tidak Ada, Tidak Ada, Tidak Ada)
Kembalikan pengguna
Tangkap mantan Sebagai Pengecualian
status = MembershipCreateStatus.UserRejected
Kembalikan Tidak Ada
Akhiri Coba
Fungsi Akhir
Mari kita interpretasikan kode di atas. Pertama, kita memasukkan catatan ke dalam database. Setelah pengguna baru berhasil ditambahkan, kita harus mengembalikan status informasi status (status diteruskan sebagai status ByRef As System.Web.Security .MembershipCreateStatus). metode), dan kami ingin mengembalikan instance kelas MembershipUser, jadi kami mengembalikan instance-nya dengan cara ini:
Redupkan pengguna Sebagai Pengguna Keanggotaan Baru("AccessMembershipProvider", nama pengguna, Tidak Ada, email, kata sandiPertanyaan, Tidak Ada, Benar, Salah, Sekarang, Nothing, Nothing, Nothing, Nothing)
Diantaranya banyak sekali konstruktor yang menggunakan metode kelas MembershipUser. Untuk lebih jelasnya anda bisa mengecek MSDN. Disini kita hanya menggunakan username, email, passwordQuestion, madedate (tanggal pembuatan akun, SEKARANG adalah digunakan di sini).
Pada halaman login, untuk menentukan apakah pengguna sah sedang login, Anda perlu menulis kode berikut:
Public Overrides Function ValidateUser( _
Nama pengguna ByVal Sebagai String, _
Kata sandi ByVal Sebagai String) Sebagai Boolean
Dim conn Sebagai OleDb.OleDbConnection(connStr) Baru
Mencoba
samb.Buka()
Redupkan sql Sebagai String = _
"Pilih *Dari Keanggotaan DIMANA" & _
" nama pengguna=@nama pengguna DAN kata sandi=@kata sandi "
Redupkan komunikasi Sebagai OleDb.OleDbCommand Baru(sql, samb.)
comm.Parameters.AddWithValue("@namapengguna", _
nama belakang)
comm.Parameters.AddWithValue("@kata sandi", _
kata sandi)
Redupkan pembaca Sebagai OleDb.OleDbDataReader = _
comm.ExecuteReader
Jika reader.HasRows Lalu
Kembali Benar
Kalau tidak
Kembali Salah
Akhiri Jika
conn.Close()
Tangkap ex Sebagai Pengecualian
Konsol.Tulis(mis.ToString)
Kembali Salah
Akhiri Coba
Fungsi Akhir
seperti ini, penyedia kustom sederhana selesai, yang dapat digunakan dengan login, registrasi, dan kontrol lainnya. Saat program dijalankan, akan muncul halaman registrasi user terlebih dahulu. Bila user berhasil melakukan registrasi maka user akan diarahkan ke halaman login, seperti terlihat pada gambar berikut: