Kullanıcı Hesapları Oluşturma (C#)

Scott Mitchell tarafından

Kodu indirin veya PDF 'yi indirin

Bu öğreticide, Yeni Kullanıcı hesapları oluşturmak için üyelik çerçevesini (SqlMembershipProvider aracılığıyla) kullanarak araştıracağız. Programlama yoluyla ve ASP aracılığıyla yeni Kullanıcı oluşturma hakkında bilgi göndereceğiz. NET 'in yerleşik CreateUserWizard denetimi.

Giriş

Önceki öğreticide , ve için gereken tabloları, görünümleri ve saklı yordamları ekleyen bir veritabanına uygulama Hizmetleri şemasını yükledik SqlMembershipProvider SqlRoleProvider . Bu işlem, bu serideki öğreticilerin geri kalanı için gereken altyapıyı oluşturdu. Bu öğreticide, SqlMembershipProvider Yeni Kullanıcı hesapları oluşturmak Için üyelik çerçevesini (aracılığıyla) kullanarak araştıracağız. Programlama yoluyla ve ASP aracılığıyla yeni Kullanıcı oluşturma hakkında bilgi göndereceğiz. NET 'in yerleşik CreateUserWizard denetimi.

Yeni Kullanıcı hesapları oluşturmayı öğrenmenin yanı sıra, form kimlik doğrulaması öğreticisine genel bakış ve ardından Forms kimlik doğrulaması yapılandırması ve gelişmiş konular öğreticisinde geliştirilmiş olan demo Web sitesini de güncelleştirmeniz gerekecektir. Tanıtım web uygulamamız, kullanıcıların kimlik bilgilerini sabit kodlanmış Kullanıcı adı/parola çiftlerine göre doğrulayan bir oturum açma sayfasına sahiptir. Üstelik, Global.asax IPrincipal IIdentity kimliği doğrulanmış kullanıcılar için özel ve nesneler oluşturan kodu içerir. Kullanıcı kimlik bilgilerini üyelik çerçevesinde doğrulamak ve özel asıl ve kimlik mantığını kaldırmak için oturum açma sayfasını güncelleştireceğiz.

Haydi başlayalım!

Forms kimlik doğrulaması ve üyelik denetim listesi

Üyelik çerçevesiyle çalışmaya başlamadan önce, bu noktaya ulaşmak için gerçekleştirdiğimiz önemli adımları gözden geçirmeniz biraz zaman atalım. SqlMembershipProviderBir form tabanlı kimlik doğrulama senaryosunda üyelik çerçevesini kullanırken, Web uygulamanızda üyelik işlevselliği uygulamadan önce aşağıdaki adımların gerçekleştirilmesi gerekir:

  1. Form tabanlı kimlik doğrulamasını etkinleştirin. Forms kimlik doğrulamasına genel bakış konusunda anlatıldığı gibi, form kimlik doğrulaması, Web.config öğesinin özniteliğini düzenleyerek ve ayarlanarak etkinleştirilir <authentication> mode Forms . Forms kimlik doğrulaması etkinken, her gelen istek bir Forms kimlik doğrulama bileti için incelenir, bu da varsa istek sahibine tanıtır.
  2. Uygulama Hizmetleri şemasını uygun veritabanına ekleyin. Kullanırken, SqlMembershipProvider Uygulama Hizmetleri şemasını bir veritabanına yüklememiz gerekir. Genellikle bu şema, uygulamanın veri modelini tutan veritabanına eklenir. SQL Server öğreticide Üyelik şeması oluşturma , aspnet_regsql.exe bunu gerçekleştirmek için aracı kullanma konusunda sizi incelemiştir.
  3. Web uygulamasının ayarlarını adım 2 ' deki veritabanına başvuracak şekilde özelleştirin. SQL Server öğreticide Üyelik şeması oluşturma , Web uygulamasını yapılandırmak için iki yol gösterdi SqlMembershipProvider . 2. Adım: LocalSqlServer bağlantı dizesi adını değiştirerek veya üyelik çerçevesi sağlayıcıları listesine yeni bir kayıtlı sağlayıcı ekleyerek ve bu yeni sağlayıcıyı 2. adımdaki veritabanını kullanacak şekilde özelleştirerek.

SqlMembershipProviderVe form tabanlı kimlik doğrulaması kullanan bir Web uygulaması oluştururken, Membership sınıfı veya ASP.net Login Web denetimlerini kullanmadan önce bu üç adımı gerçekleştirmeniz gerekir. Önceki öğreticilerde bu adımları zaten gerçekleştirdiğimiz için, üyelik çerçevesini kullanmaya başlamaya hazırız!

1. Adım: yeni ASP.NET sayfaları ekleme

Bu öğreticide ve sonraki üç, üyelikte ilgili çeşitli işlevleri ve özellikleri inceleyeceğiz. Bu öğreticiler genelinde incelenen konuları uygulamak için bir dizi ASP.NET sayfasına ihtiyacımız olacak. Bu sayfaları ve ardından bir site haritası dosyasını oluşturalım (Web.sitemap) .

Adlı projede yeni bir klasör oluşturarak başlayın Membership . Sonra, klasöre beş yeni ASP.NET sayfası ekleyerek Membership her bir sayfayı Site.master ana sayfayla bağlantılandırın. Sayfaları adlandırın:

  • CreatingUserAccounts.aspx
  • UserBasedAuthorization.aspx
  • EnhancedCreateUserWizard.aspx
  • AdditionalUserInfo.aspx
  • Guestbook.aspx

Bu noktada, projenizin Çözüm Gezgini Şekil 1 ' de gösterilen ekran görüntüsüne benzer olması gerekir.

Üyelik klasörüne beş yeni sayfa eklendi

Şekil 1: klasöre beş yeni sayfa eklenmiştir Membership (tam boyutlu görüntüyü görüntülemek için tıklayın)

Her sayfada, her bir ana sayfanın Contenttutucuları için bir tane olmak üzere iki Içerik denetimi olmalıdır: MainContent ve LoginContent .

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent"

Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="LoginContent"
Runat="Server">
</asp:Content>

LoginContentContentPlaceHolder 'ın varsayılan biçimlendirmesinin, kullanıcının kimliğinin doğrulanmadığına bağlı olarak, oturum açma veya sitede oturumu kapatma bağlantısı görüntülediğini geri çekin. Content2Ancak içerik denetiminin varlığı, ana sayfanın varsayılan işaretlemesini geçersiz kılar. Forms kimlik doğrulaması öğreticisine genel bakış konusunda anlatıldığı gibi, bu, sol sütunda oturum ilgili seçenekleri göstermek istemediğimiz sayfalarda yararlıdır.

Bununla birlikte, bu beş sayfa için ana sayfanın ContentPlaceHolder 'ın varsayılan işaretlemesini göstermek istiyoruz LoginContent . Bu nedenle, içerik denetimi için bildirim temelli biçimlendirmeyi kaldırın Content2 . Bunu yaptıktan sonra, beş sayfa biçimlendirmesinin her biri yalnızca bir Içerik denetimi içermelidir.

2. Adım: site haritasını oluşturma

Ancak, en önemsiz Web sitelerinin bir kullanıcı arabirimi formu uygulaması gerekir. Gezinti Kullanıcı arabirimi, sitenin çeşitli bölümlerine yönelik bağlantıların basit bir listesi olabilir. Alternatif olarak, bu bağlantılar menülerde veya ağaç görünümlerinde düzenlenebilir. Sayfa geliştiricileri olarak, Gezinti Kullanıcı arabirimini oluşturmak öykünün yalnızca yarısıdır. Ayrıca, sitenin mantıksal yapısını sürdürülebilir ve güncelleştirilebilir bir biçimde tanımlamak için bazı yollarla de ihtiyacımız vardır. Yeni sayfalar eklendikçe veya varolan sayfalar kaldırıldığından, tek bir kaynağı güncelleştirebilmek istiyoruz ve site haritası ve bu değişikliklerin sitenin gezinti kullanıcı arabirimine yansıtılmasını istiyoruz.

Bu iki görev – Site Haritası ' nı tanımlayan ve site haritasını temel alan bir gezinti kullanıcı arabirimini uygulayan, site haritası çerçevesi ve ASP.NET sürüm 2,0 ' ye eklenen gezinti Web denetimleri sayesinde kolayca gerçekleştirilmesi kolay bir işlemdir. Site Haritası çerçevesi, bir geliştiricinin bir site haritası tanımlamasına ve ardından programlı bir API ( SiteMap sınıfı) aracılığıyla erişmesini sağlar. Yerleşik gezinti Web denetimleri, bir menü denetimi, TreeView denetimive bir Denetimlistesini içerir.

Üyelik ve rol çerçeveleri gibi, site haritası çerçevesi de sağlayıcı modelinegöre oluşturulmuştur. Site haritası sağlayıcısı sınıfının işi, SiteMap sınıf tarafından BIR XML dosyası veya veritabanı tablosu gibi kalıcı bir veri deposundan kullanılan bellek içi yapıyı oluşturmak için kullanılır. .NET Framework, bir XML dosyasından () site haritası verilerini okuyan varsayılan bir site haritası sağlayıcısıyla birlikte gönderilir ve bu XmlSiteMapProvider öğreticide kullanacağız sağlayıcıdır. Bazı alternatif site haritası sağlayıcısı uygulamaları için, Bu öğreticinin sonundaki diğer okumalar bölümüne bakın.

Varsayılan site haritası sağlayıcısı, adlı düzgün şekilde biçimlendirilen bir XML dosyasının Web.sitemap kök dizini var olmasını bekler. Bu varsayılan sağlayıcıyı kullandığımızda, bu tür bir dosyayı eklememiz ve site haritasının yapısını uygun XML biçiminde tanımlamalıdır. Dosyayı eklemek için Çözüm Gezgini içindeki proje adına sağ tıklayın ve yeni öğe Ekle ' yi seçin. İletişim kutusundan, adlı site eşlemesi türünde bir dosya eklemeyi tercih edin Web.sitemap .

Projenin kök dizinine Web. sitemap adlı bir dosya ekleyin

Şekil 2: projenin kök dizinine adlı bir dosya ekleyin Web.sitemap (tam boyutlu görüntüyü görüntülemek için tıklayın)

XML site eşleme dosyası Web sitesinin yapısını hiyerarşi olarak tanımlar. Bu hiyerarşik ilişki, XML dosyasında öğelerin ancei aracılığıyla modellenir <siteMapNode> . , Web.sitemap <siteMap> Tam olarak bir alt düğümü olan bir üst düğüm ile başlamalıdır <siteMapNode> . Bu üst düzey <siteMapNode> öğe hiyerarşinin kökünü temsil eder ve rastgele sayıda alt düğüm içerebilir. Her <siteMapNode> öğe bir özniteliği içermeli title ve isteğe bağlı olarak url description , diğerleri arasında ve öznitelikleri içerebilir; her boş olmayan url öznitelik benzersiz olmalıdır.

Dosyasına aşağıdaki XML girin Web.sitemap :

<?xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
     <siteMapNode url="~/Default.aspx" title="Home">
          <siteMapNode title="Membership">
               <siteMapNode url="~/Membership/CreatingUserAccounts.aspx" title="Creating User Accounts" />

               <siteMapNode url="~/Membership/UserBasedAuthorization.aspx" title="User-Based Authorization" />
               <siteMapNode url="~/Membership/Guestbook.aspx" title="Storing Additional User Information" />
          </siteMapNode>

     </siteMapNode>
</siteMap>

Yukarıdaki site haritası biçimlendirmesi şekil 3 ' te gösterilen hiyerarşiyi tanımlar.

Site Haritası hiyerarşik bir gezinti yapısını temsil eder

Şekil 3: site haritası hiyerarşik bir gezinti yapısını temsil eder (tam boyutlu görüntüyü görüntülemek için tıklayın)

3. Adım: Ana sayfayı bir gezinti kullanıcı arabirimi Içerecek şekilde güncelleştirme

ASP.NET, bir kullanıcı arabirimi tasarlamak için bir dizi gezinmede ilgili Web denetimi içerir. Bunlar menü, TreeView ve, bu denetimleri içerir. Menü ve TreeView denetimleri, site haritası yapısını sırasıyla bir menü ya da ağaç içinde işler, ancak bu, yeni, ziyaret edilen geçerli düğümü ve bunların üst öğelerinden oluşan bir içerik haritası gösterir. Site haritası verileri, SiteMapDataSource kullanılarak diğer veri Web denetimlerine bağlanabilir ve sınıfı aracılığıyla programlı olarak erişilebilir SiteMap .

Site Haritası çerçevesi ve gezinti denetimlerinin kapsamlı bir açıklaması bu öğretici serisinin kapsamı dışında olduğundan, kendi gezinme Kullanıcı arabirimimizi bir adım adım yerine, Şekil 4 ' te gösterildiği gibi, iki derin madde işaretli gezinti bağlantıları listesini göstermek için bir yineleyici denetimi kullanan ASP.NET 2,0 öğretici serisindeki verilerle çalıştım .

Bu arabirimi oluşturmak için aşağıdaki bildirim temelli biçimlendirmeyi Site.master ana sayfanın sol sütununa ekleyin ve bu metnin "TODO: Menu buraya gidecektir..." Şu anda bulunuyor.

<ul>
     <li>

          <asp:HyperLink runat="server" ID="lnkHome" NavigateUrl="~/Default.aspx">Home</asp:HyperLink>
     </li>
     <asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">

          <ItemTemplate>
               <li>
                    <asp:HyperLink ID="lnkMenuItem" runat="server" 
                         NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>

                    <asp:Repeater ID="submenu" runat="server" DataSource="<%#
                         ((SiteMapNode) Container.DataItem).ChildNodes %>">
                         <HeaderTemplate>
                              <ul>
                         </HeaderTemplate>
                         <ItemTemplate>

                              <li>
                                   <asp:HyperLink ID="lnkMenuItem" runat="server" NavigateUrl='<%#
                                        Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>

                              </li>
                         </ItemTemplate>
                         <FooterTemplate>
                              </ul>
                         </FooterTemplate>
                    </asp:Repeater>
               </li>
          </ItemTemplate>
     </asp:Repeater>

</ul>
    
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />

Yukarıdaki biçimlendirme, menu içinde tanımlanan site haritası hiyerarşisini döndüren bir SiteMapDataSource 'a adlı bir yineleyici denetimini bağlar Web.sitemap . SiteMapDataSource denetiminin ShowStartingNode özelliği false olarak ayarlandığından, "Home" düğümünün alt öğelerinden başlayarak site haritasının hiyerarşisini döndürmeye başlar. Yineleyici, bu düğümlerin her birini (Şu anda yalnızca "Üyelik") bir <li> öğede görüntüler. Diğer bir deyişle, iç Yineleyici daha sonra geçerli düğümün alt öğelerini iç içe sıralanmamış bir listede görüntüler.

Şekil 4 ' te, adım 2 ' de oluşturduğumuz site haritası yapısıyla yukarıdaki biçimlendirmenin işlenmiş çıktısını gösterir. Yineleyici, Vanilla sırasız liste işaretlemesini oluşturur; ' de tanımlanan geçişli stil sayfası kuralları, Styles.css aesthetik-pkiralama düzeninden sorumludur. Yukarıdaki biçimlendirmenin nasıl çalıştığı hakkında daha ayrıntılı bir açıklama için, ana sayfalar ve site gezinti öğreticisine bakın.

Gezinme Kullanıcı arabirimi, Iç Içe sıralanmamış listeler kullanılarak Işlenir

Şekil 4: gezinme Kullanıcı arabirimi, Iç Içe sıralanmamış listeler kullanılarak işlenir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Içerik Haritası gezintisi ekleme

Sol sütundaki bağlantıların listesine ek olarak, her sayfanın bir içerik haritasıgörüntülemesini de sağlayabilirsiniz. Bir içerik haritası, kullanıcıları site hiyerarşisi içindeki geçerli konumlarını hızlıca gösteren bir gezinti kullanıcı arabirimi öğesidir. Bu, site haritasında geçerli sayfanın konumunu tespit etmek için site haritası çerçevesini kullanır ve ardından bu bilgilere göre bir içerik haritası görüntüler.

Özellikle, <span> ana sayfanın üstbilgi öğesine bir öğe ekleyin <div> ve yeni <span> öğenin class özniteliğini "içerik haritası" olarak ayarlayın. ( Styles.css Sınıfı bir "içerik haritası" sınıfı için bir kural içerir.) Sonra, bu yeni öğeye bir bir bir bir bir II ekleyin <span> .

<div id="header">
     <span class="title">User Account Tutorials</span><br />
     <span class="breadcrumb">
          <asp:SiteMapPath ID="SiteMapPath1" runat="server">

          </asp:SiteMapPath>
     </span>
</div>

Şekil 5 ' te ziyaret edildiğinde, bu değer için bir çıktı gösterilir ~/Membership/CreatingUserAccounts.aspx .

Içerik Haritası, geçerli sayfayı ve onun üst öğelerini site haritasında görüntüler

Şekil 5: içerik haritası, geçerli sayfayı ve onun üst öğelerini site haritasında görüntüler (tam boyutlu görüntüyü görüntülemek için tıklayın)

4. Adım: özel sorumluyu ve kimlik mantığını kaldırma

Özel sorumlu ve kimlik nesneleri kimliği doğrulanmış kullanıcıyla ilişkilendirilebilir. Bunu, Global.asax uygulamanın PostAuthenticateRequest kimliği doğrulandıktan sonra harekete geçen, uygulamanın olayında bir olay işleyicisi oluşturarak gerçekleştirdiniz FormsAuthenticationModule . Bu olay işleyicisinde GenericPrincipal FormsIdentity , ve ile tarafından eklenen nesneleri FormsAuthenticationModule CustomPrincipal ve CustomIdentity Bu öğreticide oluşturduğumuz nesneleri değiştirdik.

Özel asıl ve kimlik nesneleri bazı senaryolarda faydalıdır, ancak çoğu durumda GenericPrincipal ve FormsIdentity nesneleri yeterlidir. Sonuç olarak, varsayılan davranışa geri dönebileceğimizi düşündüm. Bu değişikliği, olay işleyicisini kaldırarak veya düzenleyerek ya da PostAuthenticateRequest Global.asax dosyayı tamamen silerek yapın.

5. Adım: program aracılığıyla yeni bir Kullanıcı oluşturma

Üyelik çerçevesi aracılığıyla yeni bir kullanıcı hesabı oluşturmak için Membership sınıfın CreateUser yönteminikullanın. Bu yöntemin Kullanıcı adı, parola ve kullanıcıyla ilgili diğer alanlar için giriş parametreleri vardır. Çağırma sırasında, Yeni Kullanıcı hesabının oluşturulmasını yapılandırılmış üyelik sağlayıcısına devreder ve ardından yalnızca yeni oluşturulan kullanıcı hesabını temsil eden bir MembershipUser nesne döndürür.

CreateUserYönteminde, her biri farklı sayıda giriş parametresi kabul eden dört aşırı yükleme vardır:

Bu dört aşırı yükleme, toplanan bilgi miktarına göre farklılık gösterir. Örneğin, ilk aşırı yükleme yeni kullanıcı hesabı için yalnızca Kullanıcı adı ve parola gerektirir, ancak ikinci tane de kullanıcının e-posta adresini gerektirir.

Yeni bir kullanıcı hesabı oluşturmak için gereken bilgiler, üyelik sağlayıcısının yapılandırma ayarlarına bağlı olduğundan bu aşırı yüklemeler vardır. SQL Server ' de üyelik şeması oluşturma öğreticisinde, içindeki üyelik sağlayıcısı yapılandırma ayarlarını belirtmeyi inceledik Web.config . Tablo 2, yapılandırma ayarlarının kapsamlı bir listesini içeriyordu.

Ne tür aşırı yüklemelerin kullanılabileceğini etkileyen bir üyelik sağlayıcısı yapılandırma ayarı bu CreateUser requiresQuestionAndAnswer ayardır. , requiresQuestionAndAnswer true (Varsayılan) olarak ayarlandıysa, yeni bir kullanıcı hesabı oluştururken bir güvenlik sorusu ve yanıtı belirtmemiz gerekir. Bu bilgiler daha sonra kullanıcının parolasını sıfırlaması ya da parolasını değiştirmesi gerektiğinde kullanılır. Özellikle, bu tarihte güvenlik sorusu gösterilmekte ve parolasını sıfırlamak ya da değiştirmek için doğru yanıtı girmeleri gerekir. Sonuç olarak, requiresQuestionAndAnswer true ilk iki aşırı yüklemenin her birini çağırmak için ayarlandıysa, CreateUser güvenlik sorusu ve yanıtı eksik olduğundan bir özel durum oluşur. Uygulamamız şu anda bir güvenlik sorusu ve yanıtı gerektirecek şekilde yapılandırılmış olduğundan, kullanıcının programlı bir şekilde oluşturulması için son iki aşırı yüklemeden birini kullanmaları gerekir.

Yöntemini kullanmayı görmek için CreateUser kullanıcıdan ad, parola, e-posta ve önceden tanımlanmış bir güvenlik sorusu için bir yanıt istediğimiz bir kullanıcı arabirimi oluşturalım. CreatingUserAccounts.aspx Membership Klasörü klasöründe açın ve içerik denetimine aşağıdaki Web denetimlerini ekleyin:

  • Adlı bir metin kutusu Username
  • PasswordÖzelliği olarak ayarlanmış olan, adlı bir metin kutusu TextMode``Password
  • Adlı bir metin kutusu Email
  • SecurityQuestionÖzelliği kaldırılmış şekilde adlandırılmış bir Text etiket
  • Adlı bir metin kutusu SecurityAnswer
  • CreateAccountButtonMetin özelliği "Kullanıcı hesabını oluşturma" olarak ayarlanmış adlı düğme
  • CreateAccountResultsÖzelliği kaldırılmış şekilde adlandırılmış bir etiket Text denetimi

Bu noktada, ekranınızda Şekil 6 ' da gösterilen ekran görüntüsüne benzer görünmelidir.

Çeşitli Web denetimlerini CreatingUserAccounts. aspx sayfasına ekleyin

Şekil 6: sayfaya çeşitli Web denetimleri ekleme CreatingUserAccounts.aspx (tam boyutlu görüntüyü görüntülemek için tıklayın)

SecurityQuestionEtiket ve SecurityAnswer metin kutusu, önceden tanımlanmış bir güvenlik sorusu göstermek ve kullanıcının yanıtını toplamak için tasarlanmıştır. Hem güvenlik sorusu hem de yanıtın Kullanıcı tarafından bir kullanıcı tarafından depolandığını ve bu nedenle her bir kullanıcının kendi güvenlik sorusunu tanımlamasına izin vermek mümkündür. Ancak, bu örnekte bir Evrensel güvenlik sorusu kullanmaya karar verdim: "en sevdiğiniz renk nedir?"

Bu önceden tanımlı güvenlik sorusunu uygulamak için, sayfanın arka plan kod sınıfına bir sabit ekleyin, bu, passwordQuestion güvenlik sorusu atayarak. Daha sonra, Page_Load olay işleyicisinde bu sabiti SecurityQuestion etiketin Text özelliğine atayın:

const string passwordQuestion = "What is your favorite color";
    
protected void Page_Load(object sender, EventArgs e)
{
     if (!Page.IsPostBack)
          SecurityQuestion.Text = passwordQuestion;
}

Sonra, olayı için bir olay işleyicisi oluşturun CreateAccountButton Click ve aşağıdaki kodu ekleyin:

protected void CreateAccountButton_Click(object sender, EventArgs e)
{
     MembershipCreateStatus createStatus;
     MembershipUser newUser = Membership.CreateUser(Username.Text, Password.Text, Email.Text, passwordQuestion, SecurityAnswer.Text, true, out createStatus);
     switch (createStatus)
     {
          case MembershipCreateStatus.Success:
               CreateAccountResults.Text = "The user account was successfully created!";
               break;
          case MembershipCreateStatus.DuplicateUserName:
               CreateAccountResults.Text = "There already exists a user with this username.";
               break;

          case MembershipCreateStatus.DuplicateEmail:
               CreateAccountResults.Text = "There already exists a user with this email address.";
               break;
          case MembershipCreateStatus.InvalidEmail:
               CreateAccountResults.Text = "There email address you provided in invalid.";
               break;
          case MembershipCreateStatus.InvalidAnswer:
               CreateAccountResults.Text = "There security answer was invalid.";
               break;
          case MembershipCreateStatus.InvalidPassword:
               CreateAccountResults.Text = "The password you provided is invalid. It must be seven characters long and have at least one non-alphanumeric character.";

               break;
          default:
               CreateAccountResults.Text = "There was an unknown error; the user account was NOT created.";
               break;
     }
}

ClickOlay işleyicisi, türünde adlı bir değişken tanımlayarak başlar createStatus MembershipCreateStatus . MembershipCreateStatus işlemin durumunu gösteren bir sabit listesi CreateUser . Örneğin, Kullanıcı hesabı başarıyla oluşturulursa, elde edilen MembershipCreateStatus örnek bir değerine ayarlanır Success ; diğer taraftan, aynı kullanıcı adına sahip bir kullanıcı zaten mevcut olduğundan işlem başarısız olursa, değerine ayarlanır DuplicateUserName . CreateUserKullandığımız aşırı yüklemede bir MembershipCreateStatus örneği bir parametre olarak metoda geçirmemiz gerekiyor out . Bu parametre, yöntemi içinde uygun değere ayarlanır CreateUser ve Kullanıcı hesabının başarıyla oluşturulup oluşturulmayacağını anlamak için yöntem çağrısından sonra değerini inceleyebilirsiniz.

Öğesini çağırdıktan sonra, CreateUser createStatus switch öğesine atanan değere göre uygun bir iletiyi çıkarmak için bir ifade kullanılır createStatus . Şekil 7 ' de Yeni Kullanıcı başarıyla oluşturulduğunda çıkış görüntülenir. Şekil 8 ve 9 Kullanıcı hesabı oluşturulmadıysa çıktıyı gösterir. Şekil 8 ' de ziyaretçi, üyelik sağlayıcısının yapılandırma ayarlarındaki parola gücü gereksinimlerini karşılamayan beş harfli bir parola girmiştir. Şekil 9 ' da, ziyaretçi mevcut Kullanıcı adı (Şekil 7 ' de oluşturulmuştur) ile bir kullanıcı hesabı oluşturmaya çalışıyor.

Yeni bir kullanıcı hesabı başarıyla oluşturuldu

Şekil 7: yeni bir kullanıcı hesabı başarıyla oluşturuldu (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sağlanan parola çok zayıf olduğundan kullanıcı hesabı oluşturulmadı

Şekil 8: sağlanan parola çok zayıf olduğu Için Kullanıcı hesabı oluşturulmadı (tam boyutlu görüntüyü görüntülemek için tıklayın)

Kullanıcı hesabı, Kullanıcı adı zaten kullanımda olduğundan oluşturulmaz

Şekil 9: Kullanıcı hesabı, Kullanıcı adı zaten kullanımda olduğu için oluşturulamadı (tam boyutlu görüntüyü görüntülemek için tıklayın)

Note

CreateUserHer biri türünde bir parametreye sahip olan ilk iki yöntem aşırı yüklemesinin birini kullanırken başarı veya başarısızlık durumunu belirlemeyi merak ediyor olabilirsiniz MembershipCreateStatus . Bu ilk iki aşırı yükleme, bir hata durumunda bir MembershipCreateUserException özel durum oluşturur. Bu, türünde bir StatusCode özelliği içerir MembershipCreateStatus .

Birkaç kullanıcı hesabı oluşturduktan sonra, aspnet_Users veritabanında ve tablolarının içeriğini listeleyerek hesapların oluşturulduğunu doğrulayın aspnet_Membership SecurityTutorials.mdf . Şekil 10 ' da gösterildiği gibi, şu sayfadan birini kullanarak iki Kullanıcı ekledik CreatingUserAccounts.aspx : Tito ve Bruce.

Üyelik kullanıcı deposunda Iki kullanıcı vardır: Tito ve deneme CE

Şekil 10: üyelik kullanıcı deposunda iki kullanıcı vardır: Tito ve Bruce (tam boyutlu görüntüyü görüntülemek için tıklayın)

Üyelik kullanıcı deposu artık deneme ve Tito 'nun hesap bilgilerini içerirken, deneme veya Tito 'ın sitede oturum açmasına olanak sağlayan işlevselliği uyguladık. Şu anda Login.aspx kullanıcının kimlik bilgilerini sabit kodlanmış bir Kullanıcı adı/parola çiftleri kümesine göre doğrular; belirtilen kimlik bilgilerini üyelik çerçevesi ile doğrulamaz. ' De yeni kullanıcı hesaplarını görmek için aspnet_Users ve tablolarında, aspnet_Membership tablolarda yeterli işlem olması gerekir. Sonraki öğreticide, Kullanıcı kimlik bilgilerini üyelik kullanıcı deposunda doğrulayarak, üyelik deposuna göre doğrulanacak oturum açma sayfasını güncelleştireceğiz.

Note

Veritabanınızda hiç Kullanıcı görmüyorsanız, SecurityTutorials.mdf bunun nedeni, Web uygulamanızın AspNetSqlMembershipProvider ASPNETDB.mdf veritabanını kullanıcı deposu olarak kullanan varsayılan üyelik sağlayıcısını kullanıyor olması olabilir. Sorunun bu olup olmadığını anlamak için Çözüm Gezgini Yenile düğmesine tıklayın. Adlandırılmış bir veritabanı ASPNETDB.mdf App_Data klasöre eklendiyse, bu sorun söz konusu olabilir. Üyelik sağlayıcısını düzgün bir şekilde yapılandırma yönergeleri için SQL Server öğreticisinde Üyelik şeması oluşturma işleminin 4. adımına dönün.

Çoğu kullanıcı hesabı senaryosunda ziyaretçi, Kullanıcı adı, parola, e-posta ve diğer önemli bilgileri girmek için yeni bir hesabın oluşturulduğu bir arabirimle sunulur. Bu adımda, bu tür bir arabirimi el ile oluşturmaya ve sonra Membership.CreateUser kullanıcının girdilerine göre yeni kullanıcı hesabını programlı olarak eklemek için yönteminin nasıl kullanılacağını gördük. Ancak, kodumuz Yeni Kullanıcı hesabını oluşturmuş olmanız yeterlidir. Kullanıcının yeni oluşturulan kullanıcı hesabı altındaki siteye oturum açmasını ya da kullanıcıya bir onay e-postası göndermesini sağlamak gibi herhangi bir izleme eylemi gerçekleştirmedi. Bu ek adımlar, düğmenin olay işleyicisinde ek kod gerektirir Click .

ASP.NET, Kullanıcı hesabı oluşturma işlemini işlemek için tasarlanan, Yeni Kullanıcı hesapları oluşturmak için bir kullanıcı arabirimi oluşturmayı, üyelik çerçevesinde hesap oluşturmayı ve bir onay e-postası gönderme ve yeni oluşturulan kullanıcıyı siteye kaydetme gibi hesap sonrası oluşturma görevlerini gerçekleştirmeyi sağlayan CreateUserWizard denetimiyle birlikte gelir. CreateUserWizard denetimini kullanarak, CreateUserWizard denetimini araç kutusundan bir sayfaya sürüklemek ve sonra birkaç özellik ayarlamak kadar basittir. Çoğu durumda, tek satırlık bir kod yazmanız gerekmez. Bu nifty denetimini adım 6 ' da ayrıntılı olarak araştıracağız.

Yeni Kullanıcı hesapları yalnızca tipik bir hesap oluşturma Web sayfası aracılığıyla oluşturulduysa, CreateUser CreateUserWizard denetimi gereksinimlerinize uygun olduğundan, yöntemi kullanan kodu yazmanız gerekmez. Ancak, bu CreateUser Yöntem, son derece özelleştirilmiş bir hesap kullanıcı deneyimine veya alternatif bir arabirim aracılığıyla program aracılığıyla yeni kullanıcı hesapları oluşturmanız gerektiğinde yararlıdır. Örneğin, bir kullanıcının başka bir uygulamadan Kullanıcı bilgilerini içeren bir XML dosyasını karşıya yüklemesine izin veren bir sayfanız olabilir. Sayfa, karşıya yüklenen XML dosyasının içeriğini ayrıştırır ve yöntemini çağırarak XML 'de temsil edilen her bir kullanıcı için yeni bir hesap oluşturabilir CreateUser .

6. Adım: CreateUserWizard denetimiyle yeni bir Kullanıcı oluşturma

ASP.NET, bir dizi oturum açma Web denetimi ile birlikte sunulur. Bu denetimler birçok ortak kullanıcı hesabı ve oturum açmayla ilgili senaryolar konusunda yardımcı olur. CreateUserWizard denetimi , üyelik çerçevesine yeni bir kullanıcı hesabı eklemek için bir kullanıcı arabirimi sunmak üzere tasarlanan bir denetimdir.

Diğer oturumla ilgili Web denetimlerinin birçoğu gibi, CreateUserWizard tek bir kod satırı yazmadan kullanılabilir. BT Intuit, üyelik sağlayıcısının yapılandırma ayarlarını temel alan bir kullanıcı arabirimi sağlar ve Membership CreateUser Kullanıcı gerekli bilgileri girdikten sonra "Kullanıcı Oluştur" düğmesine tıkladıktan sonra sınıfın yöntemini dahili olarak çağırır. CreateUserWizard denetimi son derece özelleştirilebilir. Hesap oluşturma işleminin çeşitli aşamaları sırasında tetiklenen bir olay ana bilgisayarı vardır. Hesap oluşturma iş akışına özel mantık eklemek için gerektiğinde olay işleyicileri oluşturuyoruz. Ayrıca, CreateUserWizard 'in görünümü çok esnektir. Varsayılan arabirimin görünümünü tanımlayan bazı özellikler vardır; gerekirse, denetim bir şablona dönüştürülebilir veya ek kullanıcı kaydı "Steps" eklenebilir.

CreateUserWizard denetiminin varsayılan arabirimini ve davranışını kullanarak bir bakalım başlayalım. Daha sonra denetimin özellikler ve olaylar aracılığıyla görünümün nasıl özelleştirileceğini keşfedeceğiz.

CreateUserWizard 'in varsayılan arabirimini ve davranışını İnceleme

CreatingUserAccounts.aspxKlasöründeki sayfaya dönün Membership , tasarım veya bölme moduna geçin ve ardından sayfanın en üstüne bir CreateUserWizard denetimi ekleyin. CreateUserWizard denetimi, araç kutusunun oturum açma denetimleri bölümünün altında dosyalanır. Denetim eklendikten sonra ID özelliğini olarak ayarlayın RegisterUser . Şekil 11 ' de ekran görüntüsü gösterildiği gibi, CreateUserWizard yeni kullanıcının Kullanıcı adı, parola, e-posta adresi ve güvenlik sorusu ve yanıtı için metin kutularına bir arabirim oluşturur.

CreateUserWizard denetimi bir genel Kullanıcı oluşturma arabirimi Işler

Şekil 11: CreateUserWizard Control bir genel Kullanıcı oluşturma arabirimi işler (tam boyutlu görüntüyü görüntülemek için tıklatın)

CreateUserWizard denetimi tarafından oluşturulan varsayılan kullanıcı arabirimini 5. adımda oluşturduğumuz arabirimle karşılaştırmak için biraz zaman atalım. Başlangıçlara yönelik olarak, CreateUserWizard denetimi ziyaretçinin hem güvenlik sorusu hem de yanıtı belirtmesini sağlar, ancak el ile oluşturulan arabirimimiz önceden tanımlanmış bir güvenlik sorusu kullanmıştı. CreateUserWizard denetiminin arabirimi doğrulama denetimlerini de içerir, ancak henüz arabirimimizin form alanlarında doğrulama uygulamamız gerekiyordu. Ve CreateUserWizard denetim arabirimi "Parolayı Onayla" metin kutusunu ("Password" ve "parolayı karşılaştır" metin kutularına girilen metnin eşit olduğundan emin olmak için bir CompareValidator ile birlikte) içerir.

CreateUserWizard denetimi, Kullanıcı arabirimini işlerken üyelik sağlayıcısının yapılandırma ayarlarını danışmandır. Örneğin, güvenlik sorusu ve yanıt metin kutuları yalnızca requiresQuestionAndAnswer true olarak ayarlandıysa görüntülenir. Benzer şekilde, CreateUserWizard, parola düzeyi gereksinimlerinin karşılanmasını sağlamak için otomatik olarak bir RegularExpressionValidator denetimi ekler ve, ve ErrorMessage ValidationExpression özelliklerini minRequiredPasswordLength ,, minRequiredNonalphanumericCharacters ve yapılandırma ayarlarına göre ayarlar passwordStrengthRegularExpression .

CreateUserWizard denetimi, adı gösterdiği gibi, sihirbaz denetimindentüretilir. Sihirbaz denetimleri, çok adımlı görevleri tamamlamak için bir arabirim sağlamak üzere tasarlanmıştır. Bir sihirbaz denetimi rastgele sayıda olabilir WizardSteps ve her biri, bu adım IÇIN HTML ve Web denetimlerini tanımlayan bir şablondur. Sihirbaz denetimi başlangıçta ilk WizardStep olarak, kullanıcının bir adımla bir sonrakine geçmesini veya önceki adımlara geri dönmesini sağlayan gezinti denetimleriyle birlikte ilk olarak görüntülenir.

Şekil 11 ' de bildirim temelli biçimlendirme olarak, CreateUserWizard denetiminin varsayılan arabirimi iki içerir WizardSteps:

  • CreateUserWizardStep – Yeni Kullanıcı hesabını oluşturmak için bilgi toplamak üzere arabirimi işler. Bu adım Şekil 11 ' de gösterilmektedir.
  • CompleteWizardStep – Hesabın başarıyla oluşturulduğunu belirten bir ileti işler.

CreateUserWizard görünümü ve davranışı, bu adımların herhangi biri şablonlara veya kendi kendinize eklenerek değiştirilebilir WizardSteps . WizardStep Ek kullanıcı bilgilerini depolama öğreticisinde kayıt arabirimine bir ekleme konusu ele alınacaktır.

CreateUserWizard denetimini görelim. CreatingUserAccounts.aspxSayfayı bir tarayıcıdan ziyaret edin. CreateUserWizard 'un arabirimine bazı geçersiz değerler girerek başlayın. Parola düzeyi gereksinimleriyle uyumlu olmayan bir parola girmeyi deneyin veya "Kullanıcı adı" metin kutusunu boş bırakın. CreateUserWizard uygun bir hata iletisi görüntüler. Şekil 12 ' de, sınırsız bir güçlü parola ile kullanıcı oluşturmaya çalışırken çıkış gösterilmektedir.

CreateUserWizard, doğrulama denetimlerini otomatik olarak yeniden çıkarır

Şekil 12: CreateUserWizard, doğrulama denetimlerini otomatik olarak çıkarır (tam boyutlu görüntüyü görüntülemek için tıklayın)

Sonra, CreateUserWizard öğesine uygun değerleri girin ve "Kullanıcı Oluştur" düğmesine tıklayın. Gerekli alanların girildiğini ve parolanın kuvvetinin yeterli olduğunu varsayarsak, CreateUserWizard üyelik çerçevesi aracılığıyla yeni bir kullanıcı hesabı oluşturur ve ardından CompleteWizardStep arabirimini görüntüler (bkz. Şekil 13). Arka planda CreateUserWizard, Membership.CreateUser tıpkı 5. adımda yaptığımız gibi yöntemini çağırır.

Yeni bir kullanıcı hesabı başarıyla oluşturuldu

Şekil 13: yeni bir kullanıcı hesabı başarıyla oluşturuldu (tam boyutlu görüntüyü görüntülemek için tıklayın)

Note

Şekil 13 ' ün gösterdiği gibi, CompleteWizardStep arabirimi devam düğmesi içerir. Ancak, bu noktada, ziyaretçi yalnızca bir geri gönderme gerçekleştirir ve ziyaretçisini aynı sayfada bırakır. "CreateUserWizard 'in görünüşünü ve davranışını özellikler aracılığıyla özelleştirme" bölümünde, bu düğmenin ziyaretçisini Default.aspx (veya başka bir sayfa) nasıl gönderebilmesini inceleyeceğiz.

Yeni bir kullanıcı hesabı oluşturduktan sonra, Visual Studio 'ya dönün ve aspnet_Users aspnet_Membership hesabın başarıyla oluşturulduğunu doğrulamak için Şekil 10 ' da yaptığımız gibi tabloları inceleyin.

CreateUserWizard 'ın davranışını ve görünümünü özellikler aracılığıyla özelleştirme

CreateUserWizard, özellikler, ve olay işleyicileri aracılığıyla çeşitli yollarla özelleştirilebilir WizardSteps . Bu bölümde, denetimin görünümünü özellikleriyle nasıl özelleştireceğinizi inceleyeceğiz; sonraki bölüm, olay işleyicileri aracılığıyla denetimin davranışını genişletmeyi inceler.

CreateUserWizard denetiminin varsayılan kullanıcı arabiriminde görünen metnin neredeyse tamamı, Plethora özellikleri aracılığıyla özelleştirilebilir. Örneğin, "Kullanıcı adı", "parola", "Parolayı Onayla", "e-posta", "güvenlik sorusu" ve metin kutularının solunda görüntülenecek "güvenlik yanıtı" etiketleri, sırasıyla,,,, UserNameLabelText PasswordLabelText ConfirmPasswordLabelText EmailLabelText QuestionLabelText ve AnswerLabelText özellikleri tarafından özelleştirilebilir. Benzer şekilde, ve içindeki "Kullanıcı oluşturma" ve "devam" düğmelerinin CreateUserWizardStep CompleteWizardStep yanı sıra bu düğmelerin düğme, bağlantı düğmeleri veya ImageButton olarak işlenip işlendiğine ilişkin özellikler de vardır.

Renkler, kenarlıklar, yazı tipleri ve diğer görsel öğeleri, bir stil özellikleri konağından yapılandırılabilir. CreateUserWizard denetiminin kendisi, genel Web denetimi stili özelliklerine sahiptir – BackColor , BorderStyle , CssClass , Font , ve bu şekilde, CreateUserWizard 'in arabiriminin belirli bölümlerine ilişkin görünümü tanımlamaya yönelik bir dizi stil özelliği vardır. Örneğin, TextBoxStyle özelliği, içindeki metin kutularının stillerini tanımlar CreateUserWizardStep , ancak TitleTextStyle özellik başlık stilini tanımlar ("yeni hesabınız için kaydolun").

Görünümle ilgili özelliklere ek olarak, CreateUserWizard denetiminin davranışını etkileyen bazı özellikler vardır. DisplayCancelButton Özelliğitrue olarak ayarlanırsa, "Kullanıcı Oluştur" düğmesinin yanında bir iptal düğmesi görüntüler (varsayılan değer false 'dur). Iptal düğmesini görüntülediğinizde, Iptal ' e tıkladıktan sonra kullanıcının gönderildiği sayfayı belirten CancelDestinationPageUrl özelliğide ayarladığınızdan emin olun. Önceki bölümde belirtildiği gibi, arabirimindeki devam düğmesi CompleteWizardStep geri göndermeye neden olur, ancak ziyaretçi aynı sayfada kalır. Devam düğmesine tıkladıktan sonra ziyaretçisini başka bir sayfaya göndermek için, bu URL 'YI ContinueDestinationPageUrl özelliktebelirtmeniz yeterlidir.

RegisterUserCreateUserWizard denetimini bir iptal düğmesi göstermek ve iptal ya da devam düğmesine tıklandığında ziyaretçiye göndermek için güncelleştirelim Default.aspx . Bunu gerçekleştirmek için, DisplayCancelButton özelliği true ve hem hem de CancelDestinationPageUrl ContinueDestinationPageUrl özelliklerini "~/default.aspx" olarak ayarlayın. Şekil 14 ' te, bir tarayıcıdan görüntülendiklerinde güncelleştirilmiş CreateUserWizard gösterilmektedir.

CreateUserWizardStep bir Iptal düğmesi Içerir

Şekil 14: CreateUserWizardStep bir iptal düğmesi içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)

Ziyaretçi bir Kullanıcı adı, parola, e-posta adresi ve güvenlik sorusu ve yanıtı girdiğinde ve "Kullanıcı Oluştur" seçeneğine tıkladığında yeni bir kullanıcı hesabı oluşturulur ve ziyaretçi yeni oluşturulan kullanıcı olarak oturum açar. Sayfayı ziyaret eden kişinin kendileri için yeni bir hesap oluşturduğundan, bu büyük olasılıkla istenen davranıştır. Ancak, yöneticilerin yeni kullanıcı hesapları eklemesine izin vermek isteyebilirsiniz. Bu durumda, Kullanıcı hesabı oluşturulur, ancak yönetici yönetici olarak oturum açmış (yeni oluşturulan hesap olarak değil) olarak kalır. Bu davranış, Boolean LoginCreatedUser özelliğiaracılığıyla değiştirilebilir.

Üyelik çerçevesindeki Kullanıcı hesapları onaylanan bayrak içeriyor; onaylanmamış kullanıcılar sitede oturum açamıyor. Varsayılan olarak, yeni oluşturulan bir hesap Onaylandı olarak işaretlenir ve kullanıcının sitede hemen oturum açmasına izin verilir. Ancak, Yeni Kullanıcı hesaplarının onaylanmamış olarak işaretlenme olasılığı vardır. Yöneticiler, oturum açmadan önce yeni kullanıcıları el ile onaylamasını istiyor olabilirsiniz; ya da bir kullanıcının oturum açmasına izin vermeden önce kayıt sırasında girilen e-posta adresinin geçerli olduğunu doğrulamak istiyor olabilirsiniz. Durum ne olursa olsun, CreateUserWizard denetiminin DisableCreatedUser özelliğini true olarak ayarlayarak yeni oluşturulan kullanıcı hesabının onaylanmamış olarak işaretlenmesini sağlayabilirsiniz (varsayılan değer false 'dur).

Notun diğer davranışta ilgili özellikleri ve içerir AutoGeneratePassword MailDefinition . AutoGeneratePassword Özelliği true olarak ayarlanırsa, CreateUserWizardStep "parola" ve "Parolayı Onayla" metin kutularını görüntülemez; bunun yerine, yeni oluşturulan kullanıcının parolası, Membership sınıfın GeneratePassword yöntemikullanılarak otomatik olarak oluşturulur. GeneratePasswordYöntemi, yapılandırılan parola gücü gereksinimlerini karşılamak için, belirtilen bir uzunluğa ve yeterince alfasayısal olmayan karakter sayısına sahip bir parola oluşturur.

MailDefinition Özelliği , hesap oluşturma işlemi sırasında belirtilen e-posta adresine bir e-posta göndermek istiyorsanız yararlı olur. MailDefinitionÖzelliği, oluşturulan e-posta iletisiyle ilgili bilgileri tanımlamaya yönelik bir dizi alt özellikler içerir. Bu alt özellikler,,,, ve gibi seçenekleri içerir Subject Priority IsBodyHtml From CC BodyFileName . BodyFileName Özelliği , e-posta iletisinin gövdesini içeren BIR metin veya HTML dosyasına işaret eder. Gövde, önceden tanımlanmış iki yer tutucuyu destekler: <%UserName%> ve <%Password%> . Dosyada varsa, bu yer tutucular, BodyFileName yalnızca oluşturulan kullanıcının adı ve parolasıyla birlikte değişir.

Note

CreateUserWizardDenetimin MailDefinition özelliği yalnızca yeni bir hesap oluşturulduğunda gönderilen e-posta iletisiyle ilgili ayrıntıları belirtir. E-posta iletisinin gerçekten gönderilme hakkında herhangi bir ayrıntı içermez (yani, bir SMTP sunucusu veya posta bırakma dizininin kullanılıp kullanılmadığını, herhangi bir kimlik doğrulama bilgisini vb.). Bu alt düzey ayrıntıların <system.net> içindeki bölümünde tanımlanması gerekir Web.config . Bu yapılandırma ayarları hakkında daha fazla bilgi ve ASP.NET 2,0 adresinden e-posta gönderme hakkında daha fazla bilgi için ASP.NET 2,0 ' de e-posta göndererekSystemNetMail.com ve makalemdeki SSS bölümüne bakın.

Olay Işleyicilerini kullanarak CreateUserWizard davranışını genişletme

CreateUserWizard denetimi, iş akışı sırasında birkaç olay oluşturur. Örneğin, bir ziyaretçi Kullanıcı adı, parola ve diğer ilgili bilgileri girdikten sonra "Kullanıcı Oluştur" düğmesine tıkladıktan sonra, CreateUserWizard denetimi CreatingUser olayınıoluşturur. Oluşturma işlemi sırasında bir sorun oluşursa, CreateUserError olay tetiklenir; ancak, Kullanıcı başarıyla oluşturulduysa CreatedUser olay tetiklenir. Ortaya çıkan ek CreateUserWizard denetim olayları vardır, ancak bunlar en fazla üç gere.

Belirli senaryolarda, uygun olay için bir olay işleyicisi oluşturarak yapabilmemiz CreateUserWizard iş akışına dokunmak istiyoruz. Bunu göstermek için RegisterUser CreateUserWizard denetimini, Kullanıcı adı ve parola hakkında bazı özel doğrulamalar içerecek şekilde geliştirelim. Özellikle, Kullanıcı adlarının başında veya sonunda boşluk içerememesi ve Kullanıcı adının parolanın herhangi bir yerde görünememesi için CreateUserWizard ' yi geliştirelim. Kısacası, birisinin "Scott" gibi bir Kullanıcı adı oluşturmasını veya "Scott" ve "Scott. 1234" gibi bir Kullanıcı adı/parola birleşimine sahip olmasını engellemek istiyoruz.

Bunu gerçekleştirmek için, CreatingUser ek doğrulama denetimlerini gerçekleştirmek üzere olaya yönelik bir olay işleyicisi oluşturacağız. Sağlanan veriler geçerli değilse, oluşturma işlemini iptal etmeniz gerekir. Ayrıca, Kullanıcı adının veya parolanın geçersiz olduğunu belirten bir ileti göstermek için sayfaya bir etiket Web denetimi eklememiz gerekir. CreateUserWizard denetiminin altına bir etiket denetimi ekleyerek başlayın, ID özelliğini InvalidUserNameOrPasswordMessage ve ForeColor özelliğini olarak ayarlayarak Red . TextÖzelliğini temizleyin ve EnableViewState Visible özelliklerini yanlış olarak ayarlayın.

<asp:Label runat="server" id="InvalidUserNameOrPasswordMessage"
     Visible="false" ForeColor="Red" EnableViewState="false">

</asp:Label>

Sonra, CreateUserWizard denetiminin olayı için bir olay işleyicisi oluşturun CreatingUser . Bir olay işleyicisi oluşturmak için, tasarımcıda denetimi seçin ve ardından Özellikler penceresi gidin. Buradan, şimşek simgesi simgesine tıklayın ve ardından olay işleyicisini oluşturmak için uygun olaya çift tıklayın.

Aşağıdaki kodu CreatingUser olay işleyicisine ekleyin:

protected void RegisterUser_CreatingUser(object sender, LoginCancelEventArgs e)
{
     string trimmedUserName = RegisterUser.UserName.Trim();
     if (RegisterUser.UserName.Length != trimmedUserName.Length)
     {
          // Show the error message
          InvalidUserNameOrPasswordMessage.Text = "The username cannot contain leading or trailing spaces.";
          InvalidUserNameOrPasswordMessage.Visible = true;

          // Cancel the create user workflow
          e.Cancel = true;
     }
     else
     {
          // Username is valid, make sure that the password does not contain the username

          if (RegisterUser.Password.IndexOf(RegisterUser.UserName, StringComparison.OrdinalIgnoreCase) >= 0)
          {
               // Show the error message
               InvalidUserNameOrPasswordMessage.Text = "The username may not appear anywhere in the password.";
               InvalidUserNameOrPasswordMessage.Visible = true;
               // Cancel the create user workflow
               e.Cancel = true;
          }
     }
}

CreateUserWizard denetimine girilen Kullanıcı adı ve parolanın UserName sırasıyla ve Password özellikleriaracılığıyla kullanılabildiğini unutmayın. Sağlanan kullanıcı adının baştaki veya sondaki boşluklar içerip içermediğini ve Kullanıcı adının parola içinde bulunup bulunmadığını anlamak için yukarıdaki olay işleyicisinde bu özellikleri kullanırız. Bu koşullardan biri karşılanıyorsa, etikette bir hata mesajı görüntülenir InvalidUserNameOrPasswordMessage ve olay işleyicisinin e.Cancel özelliği olarak ayarlanır true . e.CancelOlarak ayarlanırsa true , CreateUserWizard kısa devre dışı, Kullanıcı hesabı oluşturma işlemini etkin bir şekilde iptal edin.

Şekil 15 CreatingUserAccounts.aspx , kullanıcının başında boşluk olan bir Kullanıcı adı girdiği bir ekran görüntüsünü gösterir.

Baştaki veya sondaki boşluklara sahip kullanıcı adlarıyla Izin verilmez

Şekil 15: baştaki veya sondaki boşluklara sahip olan kullanıcı adlarıyla izin verilmez (tam boyutlu görüntüyü görüntülemek için tıklayın)

Note

CreatedUser Ek kullanıcı bilgilerini depolama öğreticisinde CreateUserWizard denetiminin olayını kullanma örneği görüntülenir.

Özet

MembershipSınıfın CreateUser yöntemi, üyelik çerçevesinde yeni bir kullanıcı hesabı oluşturur. Bu, yapılandırılan üyelik sağlayıcısına yapılan çağrının yetkisini alarak bunu yapar. Bu durumda, SqlMembershipProvider CreateUser yöntemi aspnet_Users ve veritabanı tablolarına bir kayıt ekler aspnet_Membership .

Yeni Kullanıcı hesapları programlı bir şekilde oluşturulabilmesini sağlarken (5. adımda gördüğünüz gibi), daha hızlı ve kolay bir yaklaşım CreateUserWizard denetimini kullanmaktır. Bu denetim, Kullanıcı bilgilerini toplamak ve üyelik çerçevesinde yeni bir kullanıcı oluşturmak için çok adımlı bir kullanıcı arabirimi oluşturur. Bu denetim, Membership.CreateUser kapsamalar altında, 5. adımda incelendiğiyle aynı yöntemi kullanır, ancak denetim kullanıcı arabirimini, doğrulama denetimlerini oluşturur ve bir kod tat yazmak zorunda kalmadan kullanıcı hesabı oluşturma hatalarına yanıt verir.

Bu noktada, Yeni Kullanıcı hesapları oluşturmak için işlevselliğe sahip olacak. Ancak, oturum açma sayfası yine de ikinci öğreticide geri belirttiğimiz sabit kodlu kimlik bilgileri için doğrulanıyor. Sonraki öğreticide , Login.aspx kullanıcının sağlanan kimlik bilgilerini üyelik çerçevesi 'ne karşı doğrulamak için güncelleşeceğiz.

Programlamanın kutlu olsun!

Daha Fazla Bilgi

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Yazar hakkında

Birden çok ASP/ASP. NET Books ve 4GuysFromRolla.com 'in yazarı Scott Mitchell, 1998 sürümünden bu yana Microsoft Web teknolojileriyle birlikte çalışıyor. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitim ister. Scott, mitchell@4guysfromrolla.com konumundaki blogundan veya üzerinden erişilebilir http://ScottOnWriting.NET .

Özel olarak teşekkürler...

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi. Bu öğretici için müşteri adayı gözden geçireni bir Murphy idi. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz? Öyleyse, bana bir satır bırakın mitchell@4GuysFromRolla.com .