Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
Not
Bu makale yazıldığından beri, ASP.NET Üyelik sağlayıcılarının yerini ASP.NET Identity alır. Bu makalenin yazıldığı sırada öne çıkan Üyelik sağlayıcıları yerine ASP.NET Kimlik platformunu kullanmak için uygulamaları güncelleştirmenizi kesinlikle öneririz. ASP.NET Identity, ASP.NET Üyelik sistemine göre aşağıdakiler dahil olmak üzere çeşitli avantajlara sahiptir:
- Daha iyi performans
- Geliştirilmiş genişletilebilirlik ve test edilebilirlik
- OAuth, OpenID Connect ve iki öğeli kimlik doğrulaması desteği
- Talep Tabanlı Kimlik desteği
- ASP.Net Core ile daha iyi birlikte çalışabilirlik
Bu öğreticide, yöneticilerin kullanıcıların kilitli ve onaylanan durumlarını yönetmesi için bir web sayfasının nasıl derlendiği gösterilmektedir. Ayrıca, yeni kullanıcıların yalnızca e-posta adreslerini doğruladıktan sonra nasıl onaylanacaklarını da göreceğiz.
Giriş
Kullanıcı adı, parola ve e-postanın yanı sıra, her kullanıcı hesabının kullanıcının sitede oturum açıp açamayacağını belirten iki durum alanı vardır: kilitli ve onaylandı. Kullanıcı, belirtilen sayıda dakika içinde belirtilen sayıda geçersiz kimlik bilgisi sağladığında otomatik olarak kilitlenir (varsayılan ayarlar, 10 dakika içinde 5 geçersiz oturum açma girişiminden sonra kullanıcıyı kilitler). Onaylanan durum, yeni bir kullanıcının sitede oturum açabilmesi için bazı eylemlerin devrildiği senaryolarda yararlıdır. Örneğin, kullanıcının oturum açabilmesi için önce e-posta adresini doğrulaması veya yönetici tarafından onaylanması gerekebilir.
Kilitli veya onaylanmamış bir kullanıcı oturum açamadığından, bu durumların nasıl sıfırlanabileceğini merak etmek doğaldır. ASP.NET, kullanıcıların kilitli ve onaylanan durumlarını yönetmek için yerleşik işlevler veya Web denetimleri içermez, çünkü bu kararların site temelinde işlenmesi gerekir. Bazı siteler tüm yeni kullanıcı hesaplarını (varsayılan davranış) otomatik olarak onaylayabilir. Diğer kullanıcıların yeni hesapları onaylayan bir yöneticisi vardır veya kaydolduğunda sağlanan e-posta adresine gönderilen bağlantıyı ziyaret edene kadar kullanıcıları onaylamaz. Benzer şekilde, bazı siteler bir yönetici durumlarını sıfırlayana kadar kullanıcıları kilitleyebilir, diğer siteler ise kilitli olan kullanıcıya, hesabının kilidini açmak için ziyaret edebildiği bir URL ile bir e-posta gönderebilir.
Bu öğreticide, yöneticilerin kullanıcıların kilitli ve onaylanan durumlarını yönetmesi için bir web sayfasının nasıl derlendiği gösterilmektedir. Ayrıca, yeni kullanıcıların yalnızca e-posta adreslerini doğruladıktan sonra nasıl onaylanacaklarını da göreceğiz.
1. Adım: Kullanıcıların Kilitli ve Onaylanan Durumlarını Yönetme
Birçok Kullanıcı Hesabından Bir Kullanıcı Hesabı Seçmek için Arabirim Oluşturma öğreticisinde, her kullanıcı hesabını sayfalandırılmış, filtrelenmiş bir GridView'da listeleyen bir sayfa oluşturacağız. Kılavuzda her kullanıcının adı ve e-postası, onaylanan ve kilitlenen durumları, şu anda çevrimiçi olup olmadıkları ve kullanıcı hakkındaki açıklamaları listelenir. Kullanıcıların onaylanan ve kilitlenen durumlarını yönetmek için bu kılavuzu düzenlenebilir hale getirebilirsiniz. Bir kullanıcının onaylanan durumunu değiştirmek için, yönetici önce kullanıcı hesabını bulur ve ardından onaylanan onay kutusunu işaretleyerek veya işaretini kaldırarak ilgili GridView satırını düzenler. Alternatif olarak, onaylanan ve kilitlenen durumları ayrı bir ASP.NET sayfası aracılığıyla yönetebiliriz.
Bu öğretici için iki ASP.NET sayfası kullanalım: ManageUsers.aspx
ve UserInformation.aspx
. Buradaki ManageUsers.aspx
fikir, sistemdeki kullanıcı hesaplarını listelerken UserInformation.aspx
yöneticinin belirli bir kullanıcı için onaylanan ve kilitlenen durumları yönetmesine olanak sağlamaktır. İlk işimiz GridView'ı ManageUsers.aspx
bağlantı sütunu olarak işleyen bir HyperLinkField içerecek şekilde artırmaktır. Her bağlantının öğesini işaret etmelerini UserInformation.aspx?user=UserName
istiyoruz. Burada UserName , düzenlenmek üzere kullanıcının adıdır.
Not
Parolaları Kurtarma ve Değiştirme öğreticisinin kodunu indirdiyseniz, sayfada zaten bir dizi "Yönet" bağlantısı olduğunu ManageUsers.aspx
ve UserInformation.aspx
sayfanın seçili kullanıcının parolasını değiştirmek için bir arabirim sağladığını fark etmiş olabilirsiniz. Üyelik API'sini aşarak ve kullanıcının parolasını değiştirmek için doğrudan SQL Server veritabanıyla çalışarak çalıştığından, bu öğreticiyle ilişkili kodda bu işlevselliği çoğaltmamaya karar verdim. Bu öğretici, sayfayla UserInformation.aspx
sıfırdan başlar.
GridView'aUserAccounts
"Yönet" Bağlantıları Ekleme
Sayfayı ManageUsers.aspx
açın ve GridView'a UserAccounts
bir HyperLinkField ekleyin. HyperLinkField'in Text
özelliğini sırasıyla "Yönet" ve ve DataNavigateUrlFields
DataNavigateUrlFormatString
özelliklerini UserName
ve "UserInformation.aspx?user={0}" olarak ayarlayın. Bu ayarlar HyperLinkField'i tüm köprülerin "Yönet" metnini görüntüleyecek şekilde yapılandırırken, her bağlantı uygun UserName değerini querystring'e geçirir.
HyperLinkField'i GridView'a ekledikten sonra, sayfayı ManageUsers.aspx
bir tarayıcı üzerinden görüntülemek için biraz zaman ayırın. Şekil 1'de gösterildiği gibi, her GridView satırı artık bir "Yönet" bağlantısı içerir. Bruce'un "Yönet" bağlantısı öğesine işaret UserInformation.aspx?user=Bruce
ederken, Dave için "Yönet" bağlantısı öğesine işaret eder UserInformation.aspx?user=Dave
.
Şekil 1: HyperLinkField Her Kullanıcı Hesabı için bir "Yönet" Bağlantısı Ekler (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sayfanın kullanıcı arabirimini ve kodunu UserInformation.aspx
birazdan oluşturacağız, ancak önce bir kullanıcının kilitli ve onaylanan durumlarını program aracılığıyla nasıl değiştirebileceğimizi konuşalım.
sınıfıMembershipUser
ve IsApproved
özelliklerine sahiptirIsLockedOut
.
IsLockedOut
özelliği salt okunurdur. Bir kullanıcıyı program aracılığıyla kilitlemek için bir mekanizma yoktur; kullanıcının kilidini açmak için sınıfının UnlockUser
yöntemini kullanınMembershipUser
.
IsApproved
özelliği okunabilir ve yazılabilir. Bu özellikte yapılan değişiklikleri kaydetmek için sınıfın Membership
UpdateUser
yöntemini çağırıp değiştirilen MembershipUser
nesneyi geçirmemiz gerekir.
IsApproved
Özelliği okunabilir ve yazılabilir olduğundan, checkbox denetimi büyük olasılıkla bu özelliği yapılandırmak için en iyi kullanıcı arabirimi öğesidir. Ancak, bir yönetici bir kullanıcıyı kilitleyemediğinden, yalnızca kullanıcının kilidini açabileceğinden, checkbox özelliği için IsLockedOut
çalışmaz. Özelliği için IsLockedOut
uygun bir kullanıcı arabirimi, tıklandığında kullanıcı hesabının kilidini açan bir Düğmedir. Bu Düğme yalnızca kullanıcı kilitliyse etkinleştirilmelidir.
Sayfa OluşturmaUserInformation.aspx
Artık içinde UserInformation.aspx
kullanıcı arabirimini uygulamaya hazırız. Bu sayfayı açın ve aşağıdaki Web denetimlerini ekleyin:
- Tıklandığında yöneticiyi sayfaya
ManageUsers.aspx
döndüren bir HyperLink denetimi. - Seçili kullanıcının adını görüntülemek için bir Etiket Web denetimi. Bu Etiketi
ID
olarakUserNameLabel
ayarlayın ve Text özelliğini temizleyin. - adlı
IsApproved
bir CheckBox denetimi.AutoPostBack
özelliğini olarakTrue
ayarlayın. - Kullanıcının son kilitlenme tarihini görüntülemek için bir Etiket denetimi. Bu Etiketi
LastLockedOutDateLabel
adlandırıp özelliğini temizleyinText
. - Kullanıcının kilidini açmak için bir Düğme. Bu Düğmeyi
UnlockUserButton
adlandırıp özelliğini "Kullanıcının Kilidini Aç" olarak ayarlayınText
. - Durum iletilerini görüntülemek için "Kullanıcının onaylanan durumu güncelleştirildi" gibi bir Etiket denetimi. Bu denetimi
StatusMessage
adlandırıp özelliğini temizleyinText
ve özelliğini olarakImportant
ayarlayınCssClass
.Important
( CSS sınıfı stil sayfası dosyasında tanımlanırStyles.css
; karşılık gelen metni büyük, kırmızı yazı tipinde görüntüler.)
Bu denetimleri ekledikten sonra, Visual Studio'daki Tasarım görünümü Şekil 2'deki ekran görüntüsüne benzer görünmelidir.
Şekil 2: için UserInformation.aspx
Kullanıcı Arabirimi oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Kullanıcı arabirimi tamamlandıktan sonra, bir sonraki görevimiz CheckBox'ı ve diğer denetimleri seçilen kullanıcının bilgilerine göre ayarlamaktır IsApproved
. Sayfanın Load
olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:
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
Yukarıdaki kod, bunun sonraki bir geri gönderme değil, sayfaya ilk ziyaret olduğundan emin olarak başlar. Ardından querystring alanından geçirilen user
kullanıcı adını okur ve yöntemi aracılığıyla Membership.GetUser(username)
bu kullanıcı hesabıyla ilgili bilgileri alır. Querystring aracılığıyla kullanıcı adı sağlanmadıysa veya belirtilen kullanıcı bulunamazsa, yönetici sayfaya ManageUsers.aspx
geri gönderilir.
Nesnenin MembershipUser
UserName
değeri daha sonra içinde UserNameLabel
görüntülenir ve IsApproved
CheckBox özelliği değerine göre IsApproved
işaretlenir.
Nesnenin MembershipUser
özelliği, LastLockoutDate
kullanıcının en son ne zaman kilitlendiğini belirten bir DateTime
değer döndürür. Kullanıcı hiçbir zaman kilitlenmediyse, döndürülen değer Üyelik sağlayıcısına bağlıdır. Yeni bir hesap oluşturulduğunda, SqlMembershipProvider
tablonun LastLockoutDate
alanını olarak ayarlar.aspnet_Membership
1754-01-01 12:00:00 AM
Yukarıdaki kod, LastLockoutDateLabel
özelliğin 2000 yılından LastLockoutDate
önce gerçekleşmesi durumunda içinde boş bir dize görüntüler; aksi takdirde, özelliğin LastLockoutDate
tarih bölümü Etiket'te görüntülenir. ' UnlockUserButton
nin Enabled
özelliği kullanıcının kilitli durumuna ayarlanır; bu düğmenin yalnızca kullanıcı kilitliyse etkinleştirileceği anlamına gelir.
Sayfayı UserInformation.aspx
bir tarayıcı üzerinden test etmek için biraz zaman ayırın. Elbette, başlamak ManageUsers.aspx
ve yönetmek için bir kullanıcı hesabı seçmeniz gerekir. adresine geldikten UserInformation.aspx
sonra CheckBox'ın IsApproved
yalnızca kullanıcı onaylandığında denetlendiğini unutmayın. Kullanıcı kilitlenmişse, son kilitlenme tarihi görüntülenir. Kullanıcının Kilidini Aç düğmesi yalnızca kullanıcı şu anda kilitliyse etkinleştirilir. CheckBox'ın işaretlenmesi veya işaretinin IsApproved
kaldırılması veya Kullanıcının Kilidini Aç düğmesine tıklanması geri göndermeye neden olur, ancak bu olaylar için henüz olay işleyicileri oluşturmadığımız için kullanıcı hesabında hiçbir değişiklik yapılmaz.
Visual Studio'ya dönün ve CheckBox'ın CheckedChanged
olayı ve UnlockUser
Button Click
olayı için IsApproved
olay işleyicileri oluşturun. Olay işleyicisinde CheckedChanged
kullanıcının IsApproved
özelliğini CheckBox özelliğine Checked
ayarlayın ve ardından çağrısı Membership.UpdateUser
aracılığıyla değişiklikleri kaydedin. Olay işleyicisinde Click
nesnenin MembershipUser
yöntemini çağırmanız yeterlidir UnlockUser
. Her iki olay işleyicisinde de Etiket'te StatusMessage
uygun bir ileti görüntüleyin.
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
Sayfayı Test EtmeUserInformation.aspx
Bu olay işleyicileri yerinde olduğu için sayfayı yeniden ziyaret edin ve bir kullanıcı onaylanmadı. Şekil 3'te gösterildiği gibi, sayfada kullanıcının IsApproved
özelliğinin başarıyla değiştirildiğini belirten kısa bir ileti görmeniz gerekir.
Şekil 3: Chris onaylanmadı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ardından oturumu kapatıp hesabı onaylanmamış olan kullanıcı olarak oturum açmayı deneyin. Kullanıcı onaylanmadığından oturum açamaz. Varsayılan olarak, kullanıcı nedenden bağımsız olarak oturum açamıyorsa Oturum Açma denetimi aynı iletiyi görüntüler. Ancak Üyelik Kullanıcı Deposuna Karşı Kullanıcı Kimlik Bilgilerini Doğrulama öğreticisinde Daha uygun bir ileti görüntülemek için Oturum Açma denetimini geliştirmeyi inceledik. Şekil 4'te gösterildiği gibi Chris'e hesabı henüz onaylanmadığı için oturum açamayacağını açıklayan bir ileti gösterilir.
Şekil 4: Hesabı Onaylanmadığından Chris Oturum Açamıyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Kilitli işlevselliği test etmek için onaylı bir kullanıcı olarak oturum açmayı deneyin, ancak yanlış bir parola kullanın. Kullanıcı hesabı kilitlenene kadar bu işlemi gerekli sayıda tekrarlayın. Oturum açma denetimi, kilitli bir hesaptan oturum açma girişiminde bulunursa özel bir ileti gösterecek şekilde de güncelleştirildi. Oturum açma sayfasında şu iletiyi görmeye başladığınızda bir hesabın kilitlendiğini biliyorsunuz: "Hesabınız çok fazla geçersiz oturum açma girişimi nedeniyle kilitlendi. Hesabınızın kilidinin açılması için lütfen yöneticiye başvurun."
Sayfaya ManageUsers.aspx
dönün ve kilitlenen kullanıcının Yönet bağlantısına tıklayın. Şekil 5'te gösterildiği gibi, Kullanıcının Kilidini Aç düğmesinin LastLockedOutDateLabel
etkin olması için bir değer görmeniz gerekir. Kullanıcı hesabının kilidini açmak için Kullanıcının Kilidini Aç düğmesine tıklayın. Kullanıcının kilidini açtıktan sonra yeniden oturum açabilir.
Şekil 5: Dave Sistemde Kilitlendi (Tam boyutlu görüntüyü görüntülemek için tıklayın)
2. Adım: Yeni Kullanıcıların Onaylı Durumunu Belirtme
Onaylanan durum, yeni bir kullanıcının oturum açabilmesi ve siteye özgü özelliklere erişebilmesi için bazı eylemlerin gerçekleştirilmesini istediğiniz senaryolarda yararlıdır. Örneğin, oturum açma ve kaydolma sayfaları dışında tüm sayfaların yalnızca kimliği doğrulanmış kullanıcılar tarafından erişilebildiği özel bir web sitesi çalıştırıyor olabilirsiniz. Peki bir yabancı web sitenize ulaşır, kaydolma sayfasını bulur ve bir hesap oluşturursa ne olur? Bunun olmasını önlemek için, kayıt sayfasını bir Administration
klasöre taşıyabilir ve her hesabı el ile yöneticinin oluşturmasını zorunlu kılabilirsiniz. Alternatif olarak, herkesin kaydolmasına izin verebilir, ancak yönetici kullanıcı hesabını onaylayana kadar site erişimini yasaklayabilirsiniz.
Varsayılan olarak CreateUserWizard denetimi yeni hesapları onaylar. Denetimin DisableCreatedUser
özelliğini kullanarak bu davranışı yapılandırabilirsiniz. Yeni kullanıcı hesaplarını onaylamamak için bu özelliği olarak True
ayarlayın.
Not
Varsayılan olarak CreateUserWizard denetimi yeni kullanıcı hesabında otomatik olarak günlüğe kaydedilir. Bu davranış denetimin LoginCreatedUser
özelliği tarafından dikte edilir. Onaylanmamış kullanıcılar sitede oturum açamadığından, DisableCreatedUser
True
özelliğin değerinden LoginCreatedUser
bağımsız olarak yeni kullanıcı hesabı sitede oturum açmaz.
Yöntemi aracılığıyla Membership.CreateUser
program aracılığıyla yeni kullanıcı hesapları oluşturuyorsanız, onaylanmamış bir kullanıcı hesabı oluşturmak için yeni kullanıcının IsApproved
özellik değerini giriş parametresi olarak kabul eden aşırı yüklemelerden birini kullanın.
3. Adım: Email Adreslerini Doğrulayarak Kullanıcıları Onaylama
Kullanıcı hesaplarını destekleyen birçok web sitesi, kaydolduğunda sağladıkları e-posta adresini doğrulayana kadar yeni kullanıcıları onaylamaz. Bu doğrulama işlemi genellikle botları, spam gönderenleri ve diğer ne'er-do-well'leri engellemek için kullanılır çünkü benzersiz, doğrulanmış bir e-posta adresi gerektirir ve kayıt işlemine ek bir adım ekler. Bu modelde, yeni bir kullanıcı kaydolduğunda doğrulama sayfasına bağlantı içeren bir e-posta iletisi gönderilir. Kullanıcı bağlantıyı ziyaret ederek e-postayı aldığını ve bu nedenle sağlanan e-posta adresinin geçerli olduğunu kanıtlamıştır. Doğrulama sayfası, kullanıcıyı onaylamakla sorumludur. Bu otomatik olarak gerçekleşebilir, böylece bu sayfaya ulaşan herhangi bir kullanıcı onaylanabilir veya yalnızca kullanıcı CAPTCHA gibi bazı ek bilgiler sağladıktan sonra gerçekleşebilir.
Bu iş akışına uyum sağlamak için önce yeni kullanıcıların onaylanmaması için hesap oluşturma sayfasını güncelleştirmemiz gerekir. klasöründeki sayfayı EnhancedCreateUserWizard.aspx
Membership
açın ve CreateUserWizard denetiminin DisableCreatedUser
özelliğini olarak True
ayarlayın.
Ardından CreateUserWizard denetimini, yeni kullanıcıya hesabını doğrulama yönergelerini içeren bir e-posta gönderecek şekilde yapılandırmamız gerekir. Özellikle, e-postada sayfaya Verification.aspx
(henüz oluşturmadığımız) bir bağlantı ekleyeceğiz ve sorgu dizesi aracılığıyla yeni kullanıcının UserId
bağlantısını ileteceğiz. Sayfa, Verification.aspx
belirtilen kullanıcıyı arar ve onaylanır olarak işaretler.
Yeni Kullanıcılara Doğrulama Email Gönderme
CreateUserWizard denetiminden e-posta göndermek için, özelliğini uygun şekilde yapılandırın MailDefinition
.
Önceki öğreticide açıklandığı gibi, ChangePassword ve PasswordRecovery denetimleri CreateUserWizard denetimiyle aynı şekilde çalışan bir MailDefinition
özellik içerir.
Not
özelliğini kullanmak MailDefinition
için içinde Web.config
posta teslim seçeneklerini belirtmeniz gerekir. Daha fazla bilgi için bkz. ASP.NET'de Email gönderme.
klasörde adlı CreateUserWizard.txt
EmailTemplates
yeni bir e-posta şablonu oluşturarak başlayın. Şablon için aşağıdaki metni kullanın:
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!
MailDefinition
's BodyFileName
özelliğini "~/EmailTemplates/CreateUserWizard.txt" ve Subject
özelliğini "Web Siteme Hoş Geldiniz! Lütfen hesabınızı etkinleştirin."
E-posta şablonunun CreateUserWizard.txt
bir <%VerificationUrl%>
yer tutucu içerdiğini unutmayın. Bu, sayfanın URL'sinin Verification.aspx
yerleştirileceği yerdir. CreateUserWizard, ve <%Password%>
yer tutucularını <%UserName%>
otomatik olarak yeni hesabın kullanıcı adı ve parolası ile değiştirir, ancak yerleşik <%VerificationUrl%>
yer tutucu yoktur. Bunu el ile uygun doğrulama URL'si ile değiştirmemiz gerekir.
Bunu gerçekleştirmek için CreateUserWizard'ın SendingMail
olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:
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
Olay SendingMail
, olaydan sonra CreatedUser
tetiklendiğinden yukarıdaki olay işleyicisi yeni kullanıcı hesabını yürütürken zaten oluşturulmuştur. Yöntemini çağırıp Membership.GetUser
CreateUserWizard denetimine girerek UserName
yeni kullanıcının UserId
değerine erişebiliriz. Ardından doğrulama URL'si oluşturulur. deyimi Request.Url.GetLeftPart(UriPartial.Authority)
URL'nin http://yourserver.com
bölümünü döndürür; Request.ApplicationPath
uygulamanın kökünün bulunduğu yolu döndürür. Doğrulama URL'si daha sonra olarak Verification.aspx?ID=userId
tanımlanır. Bu iki dize daha sonra tam URL'yi oluşturmak için birleştirilir. Son olarak, e-posta iletisi gövdesinin (e.Message.Body
) tüm oluşumları <%VerificationUrl%>
tam URL ile değiştirilir.
Bunun net etkisi, yeni kullanıcıların onaylanmamış olmasıdır; başka bir deyişle sitede oturum açamazlar. Ayrıca, otomatik olarak doğrulama URL'sinin bağlantısını içeren bir e-posta gönderilir (bkz. Şekil 6).
Şekil 6: Yeni Kullanıcı Doğrulama URL'sine Bağlantı içeren bir Email alır (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Not
CreateUserWizard denetiminin varsayılan CreateUserWizard adımı, kullanıcıya hesabının oluşturulduğunu bildiren bir ileti görüntüler ve devam düğmesi görüntüler. Buna tıklanması, kullanıcıyı denetimin özelliği tarafından belirtilen URL'ye ContinueDestinationPageUrl
götürür. içindeki EnhancedCreateUserWizard.aspx
CreateUserWizard öğesine yeni kullanıcılar ~/Membership/AdditionalUserInfo.aspx
gönderecek şekilde yapılandırılmıştır. Bu, kullanıcıdan kendi memleketini, giriş sayfası URL'sini ve imzasını ister. Bu bilgiler yalnızca oturum açmış kullanıcılar tarafından eklenebildiği için, kullanıcıları sitenin giriş sayfasına (~/Default.aspx
) geri göndermek için bu özelliği güncelleştirmek mantıklıdır. Ayrıca, EnhancedCreateUserWizard.aspx
kullanıcıya bir doğrulama e-postası gönderildiğini ve bu e-postadaki yönergeleri izleyene kadar hesabının etkinleştirilmeyeceğinden haberdar etmek için sayfa veya CreateUserWizard adımı genişletilmelidir. Bu değişiklikleri okuyucu için bir alıştırma olarak bırakıyorum.
Doğrulama Sayfası Oluşturma
Son görevimiz sayfayı Verification.aspx
oluşturmaktır. Bu sayfayı ana sayfayla Site.master
ilişkilendirerek kök klasöre ekleyin. Siteye eklenen önceki içerik sayfalarının çoğunda yaptığımız gibi, içerik sayfasının ana sayfanın varsayılan içeriğini kullanması için ContentPlaceHolder'a başvuran LoginContent
İçerik denetimini kaldırın.
Sayfaya Verification.aspx
bir Label Web denetimi ekleyin, öğesini olarak StatusMessage
ayarlayın ID
ve metin özelliğini temizleyin. Ardından, olay işleyicisini Page_Load
oluşturun ve aşağıdaki kodu ekleyin:
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
Yukarıdaki kodun büyük kısmı querystring aracılığıyla sağlanan UserId değerinin mevcut olduğunu, geçerli Guid
bir değer olduğunu ve mevcut bir kullanıcı hesabına başvurduğunu doğrular. Bu denetimlerin tümü geçerse kullanıcı hesabı onaylanır; aksi takdirde, uygun bir durum iletisi görüntülenir.
Şekil 7'de Verification.aspx
tarayıcı üzerinden ziyaret edildiğinde sayfa gösterilir.
Şekil 7: Yeni Kullanıcının Hesabı Artık Onaylandı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Tüm Üyelik kullanıcı hesaplarının, kullanıcının sitede oturum açıp açamayacağını belirleyen iki durumu vardır: IsLockedOut
ve IsApproved
. Bu özelliklerin her ikisi de kullanıcının oturum açması için olmalıdır True
.
Kullanıcının kilitli durumu, bir korsanın deneme yanılma yöntemleriyle siteye girme olasılığını azaltmak için bir güvenlik önlemi olarak kullanılır. Özellikle, belirli bir süre içinde belirli sayıda geçersiz oturum açma girişimi olduğunda kullanıcı kilitlenir. Bu sınırlar içindeki Üyelik sağlayıcısı ayarları Web.config
aracılığıyla yapılandırılabilir.
Onaylanan durum genellikle bazı eylemler tamamlanana kadar yeni kullanıcıların oturum açmasını yasaklama aracı olarak kullanılır. Site, yeni hesapların önce yönetici tarafından veya 3. Adımda gördüğümüz gibi e-posta adreslerini doğrulayarak onaylanmasını gerektirebilir.
Mutlu Programlama!
Yazar hakkında
Birden çok ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Saat içinde 2.0. Scott'a adresinden mitchell@4guysfromrolla.com veya adresinden blogu http://ScottOnWriting.NETaracılığıyla ulaşılabilir.
Özel Teşekkürler...
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır bırakın mitchell@4GuysFromRolla.com