Aracılığıyla paylaş


Kullanıcı Hesaplarının Kilidini Açma ve Kullanıcı Hesaplarını Onaylama (C#)

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=UserNameistiyoruz. 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.

Sayfayı ManageUsers.aspx açın ve GridView'a UserAccounts bir HyperLinkField ekleyin. HyperLinkField'in Text özelliğini sırasıyla "Yönet" ve ve DataNavigateUrlFieldsDataNavigateUrlFormatString ö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=Bruceederken, Dave için "Yönet" bağlantısı öğesine işaret eder UserInformation.aspx?user=Dave.

HyperLinkField bir ekler

Ş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 MembershipUpdateUser 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.aspxkullanı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 olarak UserNameLabel ayarlayın ve özelliğini temizleyin Text .
  • adlı IsApprovedbir CheckBox denetimi. AutoPostBack özelliğini olarak trueayarlayı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 temizleyin Text .
  • 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ın Text .
  • Durum iletilerini görüntülemek için "Kullanıcının onaylanan durumu güncelleştirildi" gibi bir Etiket denetimi. Bu denetimi StatusMessageadlandırıp özelliğini temizleyin Text ve özelliğini olarak Importantayarlayı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.

UserInformation.aspx için Kullanıcı Arabirimi oluşturma

Ş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 void Page_Load(object sender, EventArgs e)
{
     if (!Page.IsPostBack)
     {

          // If querystring value is missing, send the user to ManageUsers.aspx
          string userName = Request.QueryString["user"];
          if (string.IsNullOrEmpty(userName))
               Response.Redirect("ManageUsers.aspx");

          // Get information about this user
          MembershipUser usr = Membership.GetUser(userName);
          if (usr == null)
               Response.Redirect("ManageUsers.aspx");

          UserNameLabel.Text = usr.UserName;
          IsApproved.Checked = usr.IsApproved;
          if (usr.LastLockoutDate.Year < 2000)

               LastLockoutDateLabel.Text = string.Empty;
          else
               LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString();

          UnlockUserButton.Enabled = usr.IsLockedOut;
     }
}

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 MembershipUserUserName 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_Membership1754-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' s 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.aspxsonra 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.UpdateUseraracı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 void IsApproved_CheckedChanged(object sender, EventArgs e)
{
     // Toggle the user's approved status
     string userName = Request.QueryString["user"];
     MembershipUser usr = Membership.GetUser(userName);
     usr.IsApproved = IsApproved.Checked;
     Membership.UpdateUser(usr);
     StatusMessage.Text = "The user's approved status has been updated.";
}

protected void UnlockUserButton_Click(object sender, EventArgs e)
{
     // Unlock the user account
     string userName = Request.QueryString["user"];
     MembershipUser usr = Membership.GetUser(userName);

     usr.UnlockUser();
     UnlockUserButton.Enabled = false;
     StatusMessage.Text = "The user account has been unlocked.";
}

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.

Chris onaylanmadı

Ş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.

Hesabı Onaylanmadığından Chris Oturum Açamıyor

Ş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.

Dave SistemDen Kilitlendi

Ş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, DisableCreatedUsertrue ö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.aspxMembership açın ve CreateUserWizard denetiminin DisableCreatedUser özelliğini olarak trueayarlayı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.configposta teslim seçeneklerini belirtmeniz gerekir. Daha fazla bilgi için bkz. ASP.NET'de Email gönderme.

klasörde adlı CreateUserWizard.txtEmailTemplates 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 void NewUserWizard_SendingMail(object sender, MailMessageEventArgs e)
{
     // Get the UserId of the just-added user
     MembershipUser newUser = Membership.GetUser(NewUserWizard.UserName);

     Guid newUserId = (Guid)newUser.ProviderUserKey;

     // Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
     string urlBase = Request.Url.GetLeftPart(UriPartial.Authority) + 
          Request.ApplicationPath;

     string verifyUrl = "/Verification.aspx?ID=" + newUserId.ToString();
     string fullUrl = urlBase + verifyUrl;

     // Replace <%VerificationUrl%> with the appropriate URL and querystring
     e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl);
}

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=userIdtanı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).

Yeni Kullanıcı Doğrulama URL'sine Bağlantı içeren bir Email Alır

Ş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.aspxgö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 void Page_Load(object sender, EventArgs e)
{
     if (string.IsNullOrEmpty(Request.QueryString["ID"]))
          StatusMessage.Text = "The UserId was not included in the querystring...";
     else
     {
          Guid userId;
          try
          {
               userId = new Guid(Request.QueryString["ID"]);
          }

          catch
          {
               StatusMessage.Text = "The UserId passed into the querystring is not in the
                    proper format...";
               return;
          }

          MembershipUser usr = Membership.GetUser(userId);
          if (usr == null)
               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.";
          }
     }
}

Yukarıdaki kodun büyük kısmı querystring aracılığıyla sağlanan öğesinin UserId 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.

Yeni Kullanıcının Hesabı Artık Onaylandı

Ş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.configaracı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 Hours 2.0'dır. Scott'a adresinden mitchell@4guysfromrolla.com veya adresinden blogundan http://ScottOnWriting.NETulaşabilirsiniz.

Ö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