Bagikan melalui


Membuka Kunci dan Menyetujui Akun Pengguna (VB)

oleh Scott Mitchell

Catatan

Sejak artikel ini ditulis, penyedia Keanggotaan ASP.NET telah digantikan oleh ASP.NET Identity. Kami sangat menyarankan untuk memperbarui aplikasi untuk menggunakan platform identitas ASP.NET daripada penyedia Keanggotaan yang ditampilkan pada saat artikel ini ditulis. ASP.NET Identity memiliki sejumlah keunggulan dibandingkan sistem Keanggotaan ASP.NET, termasuk :

  • Performa yang lebih baik
  • Peningkatan ekstensibilitas dan kemampuan pengujian
  • Dukungan untuk OAuth, OpenID Connect, dan autentikasi dua faktor
  • Dukungan Identitas berbasis klaim
  • Interoperabilitas yang lebih baik dengan ASP.Net Core

Tutorial ini menunjukkan cara membuat halaman web bagi administrator untuk mengelola status pengguna yang dikunci dan disetujui. Kami juga akan melihat cara menyetujui pengguna baru hanya setelah mereka memverifikasi alamat email mereka.

Pengantar

Bersama dengan nama pengguna, kata sandi, dan email, setiap akun pengguna memiliki dua bidang status yang menentukan apakah pengguna dapat masuk ke situs: dikunci dan disetujui. Pengguna secara otomatis dikunci jika mereka memberikan kredensial yang tidak valid beberapa kali dalam jumlah menit tertentu (pengaturan default mengunci pengguna setelah 5 upaya masuk yang tidak valid dalam waktu 10 menit). Status yang disetujui berguna dalam skenario di mana beberapa tindakan harus bertranspirasi sebelum pengguna baru dapat masuk ke situs. Misalnya, pengguna mungkin perlu terlebih dahulu memverifikasi alamat email mereka atau disetujui oleh administrator sebelum dapat masuk.

Karena pengguna yang dikunci atau tidak disetujui tidak dapat masuk, wajar untuk bertanya-tanya bagaimana status ini dapat diatur ulang. ASP.NET tidak menyertakan fungsionalitas bawaan atau kontrol Web untuk mengelola status pengguna yang dikunci dan disetujui, sebagian karena keputusan ini perlu ditangani berdasarkan situs demi situs. Beberapa situs mungkin secara otomatis menyetujui semua akun pengguna baru (perilaku default). Orang lain memiliki administrator yang menyetujui akun baru atau tidak menyetujui pengguna hingga mereka mengunjungi tautan yang dikirim ke alamat email yang disediakan saat mereka mendaftar. Demikian juga, beberapa situs mungkin mengunci pengguna hingga administrator mengatur ulang status mereka, sementara situs lain mengirim email ke pengguna yang terkunci dengan URL yang dapat mereka kunjungi untuk membuka kunci akun mereka.

Tutorial ini menunjukkan cara membuat halaman web bagi administrator untuk mengelola status pengguna yang dikunci dan disetujui. Kami juga akan melihat cara menyetujui pengguna baru hanya setelah mereka memverifikasi alamat email mereka.

Langkah 1: Mengelola Status Pengguna yang Dikunci dan Disetujui

Di tutorial Membangun Antarmuka untuk Memilih Satu Akun Pengguna dari Banyak, kami membuat halaman yang mencantumkan setiap akun pengguna di halaman, GridView yang difilter. Kisi mencantumkan nama dan email setiap pengguna, status mereka yang disetujui dan dikunci, apakah mereka saat ini online, dan komentar apa pun tentang pengguna. Untuk mengelola status pengguna yang disetujui dan dikunci, kita dapat membuat kisi ini dapat diedit. Untuk mengubah status yang disetujui pengguna, administrator akan terlebih dahulu menemukan akun pengguna lalu mengedit baris GridView terkait, mencentang atau menghapus centang pada kotak centang yang disetujui. Atau, kita dapat mengelola status yang disetujui dan dikunci melalui halaman ASP.NET terpisah.

Untuk tutorial ini mari kita gunakan dua halaman ASP.NET: ManageUsers.aspx dan UserInformation.aspx. Idenya di sini adalah bahwa ManageUsers.aspx mencantumkan akun pengguna dalam sistem, sekaligus UserInformation.aspx memungkinkan administrator untuk mengelola status yang disetujui dan dikunci untuk pengguna tertentu. Urutan bisnis pertama kami adalah menambah GridView untuk ManageUsers.aspx menyertakan HyperLinkField, yang dirender sebagai kolom tautan. Kami ingin setiap tautan menunjuk ke UserInformation.aspx?user=UserName, di mana UserName adalah nama pengguna untuk diedit.

Catatan

Jika Anda mengunduh kode untuk tutorial Memulihkan dan Mengubah Kata Sandi, Anda mungkin telah memperhatikan bahwa ManageUsers.aspx halaman sudah berisi sekumpulan tautan "Kelola" dan halaman menyediakan UserInformation.aspx antarmuka untuk mengubah kata sandi pengguna yang dipilih. Saya memutuskan untuk tidak mereplikasi fungsionalitas itu dalam kode yang terkait dengan tutorial ini karena berfungsi dengan menghindari API Keanggotaan dan beroperasi langsung dengan database SQL Server untuk mengubah kata sandi pengguna. Tutorial ini dimulai dari awal dengan UserInformation.aspx halaman.

ManageUsers.aspx Buka halaman dan tambahkan HyperLinkField ke UserAccounts GridView. Atur properti HyperLinkField Text ke "Kelola" dan propertinya DataNavigateUrlFieldsDataNavigateUrlFormatString masing-masing ke UserName dan "UserInformation.aspx?user={0}". Pengaturan ini mengonfigurasi HyperLinkField sehingga semua hyperlink menampilkan teks "Kelola", tetapi setiap tautan meneruskan nilai UserName yang sesuai ke dalam querystring.

Setelah menambahkan HyperLinkField ke GridView, luangkan waktu sejenak ManageUsers.aspx untuk melihat halaman melalui browser. Seperti yang ditunjukkan Gambar 1, setiap baris GridView sekarang menyertakan tautan "Kelola". Tautan "Kelola" untuk Bruce menunjuk ke UserInformation.aspx?user=Bruce, sedangkan tautan "Kelola" untuk titik Dave ke UserInformation.aspx?user=Dave.

HyperLinkField Menambahkan

Gambar 1: HyperLinkField Menambahkan Tautan "Kelola" untuk Setiap Akun Pengguna (Klik untuk melihat gambar ukuran penuh)

Kami akan membuat antarmuka dan kode pengguna untuk halaman dalam UserInformation.aspx sesaat, tetapi pertama-tama mari kita bicara tentang cara mengubah status pengguna yang dikunci dan disetujui secara terprogram. Kelas MembershipUser memilikiIsLockedOut properti dan IsApproved. Properti IsLockedOut bersifat baca-saja. Tidak ada mekanisme untuk mengunci pengguna secara terprogram; untuk membuka kunci pengguna, gunakan MembershipUser metode kelas UnlockUser. Properti IsApproved dapat dibaca dan dapat ditulis. Untuk menyimpan perubahan apa pun pada properti ini, kita perlu memanggil Membership metode kelasUpdateUser, meneruskan objek yang dimodifikasiMembershipUser.

IsApproved Karena properti dapat dibaca dan dapat ditulis, kontrol CheckBox mungkin adalah elemen antarmuka pengguna terbaik untuk mengonfigurasi properti ini. Namun, Kotak Centang tidak akan berfungsi untuk IsLockedOut properti karena administrator tidak dapat mengunci pengguna, dia hanya dapat membuka kunci pengguna. Antarmuka pengguna yang sesuai untuk IsLockedOut properti adalah Tombol yang, ketika diklik, membuka kunci akun pengguna. Tombol ini hanya boleh diaktifkan jika pengguna dikunci.

UserInformation.aspxMembuat Halaman

Kami sekarang siap untuk mengimplementasikan antarmuka pengguna di UserInformation.aspx. Buka halaman ini dan tambahkan kontrol Web berikut ini:

  • Kontrol HyperLink yang, saat diklik, mengembalikan administrator ke ManageUsers.aspx halaman.
  • Kontrol Label Web untuk menampilkan nama pengguna yang dipilih. Atur ID Label ini ke UserNameLabel dan hapus properti Teksnya.
  • Kontrol Kotak Centang bernama IsApproved. Atur propertinya AutoPostBack ke True.
  • Kontrol Label untuk menampilkan tanggal terakhir pengguna dikunci. Beri nama Label LastLockedOutDateLabel ini dan hapus propertinya Text .
  • Tombol untuk membuka kunci pengguna. Beri nama Tombol UnlockUserButton ini dan atur propertinya Text ke "Buka Kunci Pengguna".
  • Kontrol Label untuk menampilkan pesan status, seperti, "Status pengguna yang disetujui telah diperbarui." Beri nama kontrol StatusMessageini , hapus propertinya Text , dan atur propertinya CssClass ke Important. (The Important Kelas CSS didefinisikan dalam Styles.css file lembar gaya; itu menampilkan teks yang sesuai dalam font merah besar.)

Setelah menambahkan kontrol ini, tampilan Desain di Visual Studio akan terlihat mirip dengan cuplikan layar di Gambar 2.

Membuat Antarmuka Pengguna untuk UserInformation.aspx

Gambar 2: Buat Antarmuka Pengguna untuk UserInformation.aspx (Klik untuk melihat gambar ukuran penuh)

Setelah antarmuka pengguna selesai, tugas kami berikutnya adalah mengatur IsApproved CheckBox dan kontrol lain berdasarkan informasi pengguna yang dipilih. Buat penanganan aktivitas untuk peristiwa halaman Load dan tambahkan kode berikut:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If Not Page.IsPostBack Then
          ' If querystring value is missing, send the user to ManageUsers.aspx
          Dim userName As String = Request.QueryString("user")
          If String.IsNullOrEmpty(userName) Then
               Response.Redirect("ManageUsers.aspx")
          End If

          ' Get information about this user
          Dim usr As MembershipUser = Membership.GetUser(userName)
          If usr Is Nothing Then
               Response.Redirect("ManageUsers.aspx")

          End If

          UserNameLabel.Text = usr.UserName
          IsApproved.Checked = usr.IsApproved

          If usr.LastLockoutDate.Year < 2000 Then
               LastLockoutDateLabel.Text = String.Empty
          Else
               LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString()
               UnlockUserButton.Enabled = usr.IsLockedOut
          End If
     End If
End Sub

Kode di atas dimulai dengan memastikan bahwa ini adalah kunjungan pertama ke halaman dan bukan postback berikutnya. Kemudian membaca nama pengguna yang diteruskan melalui user bidang querystring dan mengambil informasi tentang akun pengguna tersebut Membership.GetUser(username) melalui metode . Jika tidak ada nama pengguna yang disediakan melalui querystring, atau jika pengguna yang ditentukan tidak dapat ditemukan, administrator dikirim kembali ke ManageUsers.aspx halaman.

Nilai MembershipUser objek UserName kemudian ditampilkan di UserNameLabel dan IsApproved Kotak Centang dicentang berdasarkan IsApproved nilai properti.

Properti MembershipUser objek LastLockoutDate mengembalikan nilai yang DateTime menunjukkan kapan pengguna terakhir kali dikunci. Jika pengguna belum pernah dikunci, nilai yang dikembalikan tergantung pada penyedia Keanggotaan. Saat akun baru dibuat, mengatur SqlMembershipProvideraspnet_Membership bidang tabel LastLockoutDate ke 1754-01-01 12:00:00 AM. Kode di atas menampilkan string kosong dalam LastLockoutDateLabel jika LastLockoutDate properti terjadi sebelum tahun 2000; jika tidak, bagian LastLockoutDate tanggal properti ditampilkan di Label. Enabled Properti UnlockUserButtondiatur ke status pengguna yang dikunci, yang berarti bahwa Tombol ini hanya akan diaktifkan jika pengguna dikunci.

Luangkan waktu sejenak UserInformation.aspx untuk menguji halaman melalui browser. Tentu saja, Anda harus memulai dari ManageUsers.aspx dan memilih akun pengguna untuk dikelola. Setelah tiba di UserInformation.aspx, perhatikan bahwa IsApproved Kotak Centang hanya diperiksa apakah pengguna disetujui. Jika pengguna pernah dikunci, tanggal terakhir mereka yang dikunci akan ditampilkan. Tombol Buka Kunci Pengguna diaktifkan hanya jika pengguna saat ini dikunci. Memeriksa atau menghapus centang Kotak IsApproved Centang atau mengklik tombol Buka Kunci Pengguna menyebabkan postback, tetapi tidak ada modifikasi yang dilakukan pada akun pengguna karena kami belum membuat penanganan aktivitas untuk peristiwa ini.

Kembali ke Visual Studio dan buat penanganan aktivitas untuk IsApproved peristiwa Kotak Centang CheckedChanged dan UnlockUser acara Tombol Click . Di penanganan CheckedChanged aktivitas, atur properti pengguna IsApproved ke Checked properti Kotak Centang lalu simpan perubahan melalui panggilan ke Membership.UpdateUser. Di penanganan Click aktivitas, cukup panggil MembershipUser metode objek UnlockUser . Di kedua penanganan aktivitas, tampilkan pesan yang sesuai di StatusMessage Label.

Protected Sub IsApproved_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles IsApproved.CheckedChanged
     'Toggle the user's approved status
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.IsApproved = IsApproved.Checked
     Membership.UpdateUser(usr)

     StatusMessage.Text = "The user's approved status has been updated."

End Sub

Protected Sub UnlockUserButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UnlockUserButton.Click
     'Unlock the user account
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.UnlockUser()
     UnlockUserButton.Enabled = False

     StatusMessage.Text = "The user account has been unlocked."
End Sub

UserInformation.aspxMenguji Halaman

Dengan penanganan aktivitas ini di tempat, kunjungi kembali halaman dan pengguna yang tidak disetujui. Seperti yang ditunjukkan Gambar 3, Anda akan melihat pesan singkat di halaman yang menunjukkan bahwa properti pengguna IsApproved berhasil dimodifikasi.

Chris tidak disetujui

Gambar 3: Chris telah Tidak Disetujui (Klik untuk melihat gambar ukuran penuh)

Selanjutnya, keluar dan coba masuk sebagai pengguna yang akunnya baru saja tidak disetujui. Karena pengguna tidak disetujui, mereka tidak dapat masuk. Secara default, kontrol Masuk menampilkan pesan yang sama jika pengguna tidak dapat masuk, terlepas dari alasannya. Tetapi dalam tutorial Memvalidasi Kredensial Pengguna Terhadap Penyimpanan Pengguna Keanggotaan, kami melihat peningkatan kontrol Login untuk menampilkan pesan yang lebih sesuai. Seperti yang ditunjukkan Oleh Gambar 4, Chris ditunjukkan pesan yang menjelaskan bahwa dia tidak dapat masuk karena akunnya belum disetujui.

Chris Tidak Dapat Masuk Karena Akunnya Tidak Disetujui

Gambar 4: Chris Tidak Dapat Masuk Karena Akunnya Tidak Disetujui (Klik untuk melihat gambar ukuran penuh)

Untuk menguji fungsionalitas yang dikunci, coba masuk sebagai pengguna yang disetujui, tetapi gunakan kata sandi yang salah. Ulangi proses ini berapa kali yang diperlukan hingga akun pengguna dikunci. Kontrol Masuk juga diperbarui untuk menampilkan pesan kustom jika mencoba masuk dari akun yang dikunci. Anda tahu bahwa akun telah dikunci setelah Anda mulai melihat pesan berikut di halaman masuk: "Akun Anda telah dikunci karena terlalu banyak upaya masuk yang tidak valid. Silakan hubungi administrator agar akun Anda tidak terkunci."

Kembali ke ManageUsers.aspx halaman dan klik tautan Kelola untuk pengguna yang dikunci. Seperti yang ditunjukkan Gambar 5, Anda akan melihat nilai di tombol LastLockedOutDateLabel Buka Kunci Pengguna harus diaktifkan. Klik tombol Buka Kunci Pengguna untuk membuka kunci akun pengguna. Setelah Anda membuka kunci pengguna, mereka akan dapat masuk lagi.

Dave Telah Dikunci Dari Sistem

Gambar 5: Dave Telah Dikunci dari Sistem (Klik untuk melihat gambar ukuran penuh)

Langkah 2: Menentukan Status Pengguna Baru yang Disetujui

Status yang disetujui berguna dalam skenario di mana Anda ingin beberapa tindakan dilakukan sebelum pengguna baru dapat masuk dan mengakses fitur khusus pengguna situs. Misalnya, Anda mungkin menjalankan situs web privat di mana semua halaman, kecuali untuk halaman masuk dan pendaftaran, hanya dapat diakses oleh pengguna yang diautentikasi. Tetapi apa yang terjadi jika orang asing mencapai situs web Anda, menemukan halaman pendaftaran, dan membuat akun? Untuk mencegah hal ini terjadi, Anda dapat memindahkan halaman pendaftaran ke Administration folder, dan mengharuskan administrator membuat setiap akun secara manual. Atau, Anda dapat mengizinkan siapa pun untuk mendaftar, tetapi melarang akses situs hingga administrator menyetujui akun pengguna.

Secara default, kontrol CreateUserWizard menyetujui akun baru. Anda dapat mengonfigurasi perilaku ini menggunakan properti kontrolDisableCreatedUser. Atur properti ini ke True untuk tidak menyetujui akun pengguna baru.

Catatan

Secara default kontrol CreateUserWizard secara otomatis masuk ke akun pengguna baru. Perilaku ini ditentukan oleh properti kontrolLoginCreatedUser. Karena pengguna yang tidak disetujui tidak dapat masuk ke situs, ketika DisableCreatedUserTrue akun pengguna baru tidak masuk ke situs, terlepas dari LoginCreatedUser nilai properti .

Jika Anda secara terprogram membuat akun pengguna baru melalui Membership.CreateUser metode , untuk membuat akun pengguna yang tidak disetujui, gunakan salah satu kelebihan beban yang menerima nilai properti pengguna IsApproved baru sebagai parameter input.

Langkah 3: Menyetujui Pengguna Dengan Memverifikasi Alamat Email mereka

Banyak situs web yang mendukung akun pengguna tidak menyetujui pengguna baru sampai mereka memverifikasi alamat email yang mereka berikan saat mendaftar. Proses verifikasi ini biasanya digunakan untuk menggagalkan bot, spammer, dan ne'er-do-wells lainnya karena memerlukan alamat email unik dan terverifikasi dan menambahkan langkah tambahan dalam proses pendaftaran. Dengan model ini, ketika pengguna baru mendaftar, mereka dikirimi pesan email yang menyertakan tautan ke halaman verifikasi. Dengan mengunjungi tautan, pengguna telah membuktikan bahwa mereka menerima email dan, oleh karena itu, alamat email yang diberikan valid. Halaman verifikasi bertanggung jawab untuk menyetujui pengguna. Ini dapat terjadi secara otomatis, sehingga menyetujui setiap pengguna yang mencapai halaman ini, atau hanya setelah pengguna memberikan beberapa informasi tambahan, seperti CAPTCHA.

Untuk mengakomodasi alur kerja ini, kita perlu terlebih dahulu memperbarui halaman pembuatan akun sehingga pengguna baru tidak disetujui. Buka halaman EnhancedCreateUserWizard.aspx di Membership folder dan atur properti kontrol DisableCreatedUser CreateUserWizard ke True.

Selanjutnya, kita perlu mengonfigurasi kontrol CreateUserWizard untuk mengirim email ke pengguna baru dengan instruksi tentang cara memverifikasi akun mereka. Secara khusus, kami akan menyertakan tautan dalam email ke Verification.aspx halaman (yang belum kami buat), meneruskan pengguna UserId baru melalui querystring. Halaman Verification.aspx akan mencari pengguna yang ditentukan dan menandai mereka disetujui.

Mengirim Email Verifikasi ke Pengguna Baru

Untuk mengirim email dari kontrol CreateUserWizard, konfigurasikan propertinya MailDefinition dengan tepat. Seperti yang dibahas dalam tutorial sebelumnya, kontrol ChangePassword dan PasswordRecovery menyertakan MailDefinition properti yang berfungsi dengan cara yang sama seperti kontrol CreateUserWizard.

Catatan

Untuk menggunakan properti , MailDefinition Anda perlu menentukan opsi pengiriman email di Web.config. Untuk informasi selengkapnya, lihat Mengirim Email di ASP.NET.

Mulailah dengan membuat templat email baru bernama CreateUserWizard.txt di EmailTemplates folder . Gunakan teks berikut untuk templat:

Hello <%UserName%>! Welcome aboard.

Your new account is almost ready, but before you can login you must first visit:
<%VerificationUrl%>

Once you have visited the verification URL you will be redirected to the login page.

If you have any problems or questions, please reply to this email.

Thanks!

Atur MailDefinitionproperti ke BodyFileName "~/EmailTemplates/CreateUserWizard.txt" dan propertinya Subject ke "Selamat Datang di Situs Web Saya! Harap aktifkan akun Anda."

Perhatikan bahwa CreateUserWizard.txt templat email menyertakan <%VerificationUrl%> tempat penampung. Di sinilah URL untuk Verification.aspx halaman akan ditempatkan. CreateUserWizard secara otomatis mengganti <%UserName%> tempat penampung dan <%Password%> dengan nama pengguna dan kata sandi akun baru, tetapi tidak ada tempat penampung bawaan <%VerificationUrl%> . Kita perlu menggantinya secara manual dengan URL verifikasi yang sesuai.

Untuk mencapai hal ini, buat penanganan aktivitas untuk peristiwa CreateUserWizard SendingMail dan tambahkan kode berikut:

Protected Sub NewUserWizard_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles NewUserWizard.SendingMail
     'Get the UserId of the just-added user
     Dim newUser As MembershipUser = Membership.GetUser(NewUserWizard.UserName)
     Dim newUserId As Guid = CType(newUser.ProviderUserKey, Guid)

     ' Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
     Dim urlBase As String = Request.Url.GetLeftPart(UriPartial.Authority) & Request.ApplicationPath
     Dim verifyUrl As String = "/Verification.aspx?ID=" + newUserId.ToString()
     Dim fullUrl As String = urlBase & verifyUrl

     ' Replace <%VerificationUrl%> with the appropriate URL and querystring

     e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl)
End Sub

Peristiwa diaktifkan SendingMail setelah CreatedUser peristiwa, yang berarti bahwa pada saat penanganan aktivitas di atas menjalankan akun pengguna baru telah dibuat. Kita dapat mengakses nilai pengguna UserId baru dengan memanggil Membership.GetUser metode , meneruskan yang UserName dimasukkan ke kontrol CreateUserWizard. Selanjutnya, URL verifikasi dibentuk. Pernyataan Request.Url.GetLeftPart(UriPartial.Authority) mengembalikan http://yourserver.com bagian URL; Request.ApplicationPath mengembalikan jalur tempat aplikasi di-rooting. URL verifikasi kemudian didefinisikan sebagai Verification.aspx?ID=userId. Kedua string ini kemudian digabungkan untuk membentuk URL lengkap. Akhirnya, isi pesan email (e.Message.Body) memiliki semua kemunculan <%VerificationUrl%> diganti dengan URL lengkap.

Efek bersihnya adalah bahwa pengguna baru tidak disetujui, yang berarti bahwa mereka tidak dapat masuk ke situs. Selain itu, mereka secara otomatis dikirimi email dengan tautan ke URL verifikasi (lihat Gambar 6).

Pengguna Baru Menerima Email dengan Tautan ke URL Verifikasi

Gambar 6: Pengguna Baru Menerima Email dengan Tautan ke URL Verifikasi (Klik untuk melihat gambar ukuran penuh)

Catatan

Langkah CreateUserWizard default kontrol CreateUserWizard menampilkan pesan yang memberi tahu pengguna bahwa akun mereka telah dibuat dan menampilkan tombol Lanjutkan. Mengklik ini akan membawa pengguna ke URL yang ditentukan oleh properti kontrol ContinueDestinationPageUrl . CreateUserWizard di dikonfigurasi EnhancedCreateUserWizard.aspx untuk mengirim pengguna baru ke ~/Membership/AdditionalUserInfo.aspx, yang meminta pengguna untuk kampung halaman, URL beranda, dan tanda tangan mereka. Karena informasi ini hanya dapat ditambahkan oleh pengguna yang masuk, masuk akal untuk memperbarui properti ini untuk mengirim pengguna kembali ke beranda situs (~/Default.aspx). Selain itu, EnhancedCreateUserWizard.aspx halaman atau langkah CreateUserWizard harus diganti untuk memberi tahu pengguna bahwa mereka telah dikirimi email verifikasi dan akun mereka tidak akan diaktifkan sampai mereka mengikuti instruksi dalam email ini. Saya meninggalkan modifikasi ini sebagai latihan untuk pembaca.

Membuat Halaman Verifikasi

Tugas terakhir kita adalah membuat Verification.aspx halaman. Tambahkan halaman ini ke folder akar, mengaitkannya dengan Site.master halaman master. Seperti yang telah kami lakukan dengan sebagian besar halaman konten sebelumnya yang ditambahkan ke situs, hapus kontrol Konten yang mereferensikan LoginContent ContentPlaceHolder sehingga halaman konten menggunakan konten default halaman master.

Tambahkan kontrol Web Label ke Verification.aspx halaman, atur ID ke StatusMessage dan hapus properti teksnya. Selanjutnya, buat penanganan Page_Load aktivitas dan tambahkan kode berikut:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If String.IsNullOrEmpty(Request.QueryString("ID")) Then
          StatusMessage.Text = "The UserId was not included in the querystring..."
     Else
          Dim userId As Guid
          Try
               userId = New Guid(Request.QueryString("ID"))
          Catch
               StatusMessage.Text = "The UserId passed into the querystring is not in the proper format..."

               Exit Sub
          End Try

          Dim usr As MembershipUser = Membership.GetUser(userId)
          If usr Is Nothing Then
               StatusMessage.Text = "User account could not be found..."
          Else
               ' Approve the user
               usr.IsApproved = True
               Membership.UpdateUser(usr)
               StatusMessage.Text = "Your account has been approved. Please <a href=""Login.aspx"">login</a> to the site."

          End If
     End If
End Sub

Sebagian besar kode di atas memverifikasi bahwa UserId yang disediakan melalui querystring ada, bahwa kode tersebut adalah nilai yang valid Guid , dan mereferensikan akun pengguna yang ada. Jika semua pemeriksaan ini lolos, akun pengguna disetujui; jika tidak, pesan status yang sesuai ditampilkan.

Gambar 7 memperlihatkan Verification.aspx halaman saat dikunjungi melalui browser.

Akun Pengguna Baru Sekarang Disetujui

Gambar 7: Akun Pengguna Baru Sekarang Disetujui (Klik untuk melihat gambar ukuran penuh)

Ringkasan

Semua akun pengguna Keanggotaan memiliki dua status yang menentukan apakah pengguna dapat masuk ke situs: IsLockedOut dan IsApproved. Kedua properti ini harus agar True pengguna dapat masuk.

Status pengguna yang terkunci digunakan sebagai langkah keamanan untuk mengurangi kemungkinan peretas masuk ke situs melalui metode brute force. Secara khusus, pengguna dikunci jika ada sejumlah upaya masuk yang tidak valid dalam jangka waktu tertentu. Batas ini dapat dikonfigurasi melalui pengaturan penyedia Keanggotaan di Web.config.

Status yang disetujui umumnya digunakan sebagai sarana untuk melarang pengguna baru masuk hingga beberapa tindakan telah ditranspirasi. Mungkin situs mengharuskan akun baru terlebih dahulu disetujui oleh administrator atau, seperti yang kita lihat di Langkah 3, dengan memverifikasi alamat email mereka.

Selamat Pemrograman!

Tentang Penulis

Scott Mitchell, penulis beberapa buku ASP/ASP.NET dan pendiri 4GuysFromRolla.com, telah bekerja dengan teknologi Microsoft Web sejak 1998. Scott bekerja sebagai konsultan, pelatih, dan penulis independen. Buku terbarunya adalah Sams Teach Yourself ASP.NET 2.0 dalam 24 Jam. Scott dapat dijangkau di mitchell@4guysfromrolla.com atau melalui blognya di http://ScottOnWriting.NET.

Terima kasih khusus untuk...

Seri tutorial ini ditinjau oleh banyak peninjau yang bermanfaat. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, letakkan saya antrean di mitchell@4GuysFromRolla.com