Kullanıcı Hesapları Oluşturma (C#)Creating User Accounts (C#)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

Bu öğreticide, Yeni Kullanıcı hesapları oluşturmak için üyelik çerçevesini (SqlMembershipProvider aracılığıyla) kullanarak araştıracağız.In this tutorial we will explore using the Membership framework (via the SqlMembershipProvider) to create new user accounts. Programlama yoluyla ve ASP aracılığıyla yeni Kullanıcı oluşturma hakkında bilgi göndereceğiz. NET 'in yerleşik CreateUserWizard denetimi.We will see how to create new users programmatically and through ASP.NET's built-in CreateUserWizard control.

GirişIntroduction

Önceki öğreticide , uygulama Hizmetleri şemasını, SqlMembershipProvider ve SqlRoleProvidergereken tabloları, görünümleri ve saklı yordamları ekleyen bir veritabanına yükledik.In the preceding tutorial we installed the application services schema in a database, which added the tables, views, and stored procedures needed by the SqlMembershipProvider and SqlRoleProvider. Bu işlem, bu serideki öğreticilerin geri kalanı için gereken altyapıyı oluşturdu.This created the infrastructure we will need for the remainder of the tutorials in this series. Bu öğreticide, Yeni Kullanıcı hesapları oluşturmak için üyelik çerçevesi (SqlMembershipProvideraracılığıyla) kullanılarak araştıracağız.In this tutorial we will explore using the Membership framework (via the SqlMembershipProvider) to create new user accounts. Programlama yoluyla ve ASP aracılığıyla yeni Kullanıcı oluşturma hakkında bilgi göndereceğiz. NET 'in yerleşik CreateUserWizard denetimi.We will see how to create new users programmatically and through ASP.NET's built-in CreateUserWizard control.

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.In addition to learning how to create new user accounts, we will also need to update the demo website we first created in the An Overview of Forms Authentication tutorial and then enhanced in the Forms Authentication Configuration and Advanced Topics tutorial. 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.Our demo web application has a login page that validates users' credentials against hard-coded username/password pairs. Ayrıca, Global.asax kimliği doğrulanmış kullanıcılar için özel IPrincipal ve IIdentity nesneleri oluşturan kodu içerir.Moreover, Global.asax includes code that creates custom IPrincipal and IIdentity objects for authenticated users. 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.We will update the login page to validate users' credentials against the Membership framework and remove the custom principal and identity logic.

Haydi başlayın!Let's get started!

Forms kimlik doğrulaması ve üyelik denetim listesiThe Forms Authentication and Membership Checklist

Ü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.Before we begin working with the Membership framework, let's take a moment to review the important steps we have taken to reach this point. Bir form tabanlı kimlik doğrulama senaryosunda üyelik çerçevesini SqlMembershipProvider kullanırken, Web uygulamanızda üyelik işlevselliği uygulamadan önce aşağıdaki adımların gerçekleştirilmesi gerekir:When using the Membership framework with the SqlMembershipProvider in a forms-based authentication scenario, the following steps need to be performed prior to implementing Membership functionality in your web application:

  1. Form tabanlı kimlik doğrulamasını etkinleştirin.Enable forms-based authentication. Forms kimlik doğrulamasına genel bakışkonusunda anlatıldığı gibi, form kimlik doğrulaması Web.config düzenleyerek ve <authentication> öğenin mode özniteliği Formsolarak ayarlanarak etkinleştirilir.As we discussed in An Overview of Forms Authentication, forms authentication is enabled by editing Web.config and setting the <authentication> element's mode attribute to Forms. Forms kimlik doğrulaması etkinken, her gelen istek bir Forms kimlik doğrulama biletiiçin incelenir, bu da varsa istek sahibine tanıtır.With forms authentication enabled, each incoming request is examined for a forms authentication ticket, which, if present, identifies the requestor.
  2. Uygulama Hizmetleri şemasını uygun veritabanına ekleyin.Add the application services schema to the appropriate database. SqlMembershipProvider kullanırken, uygulama Hizmetleri şemasını bir veritabanına yüklememiz gerekir.When using the SqlMembershipProvider we need to install the application services schema to a database. Genellikle bu şema, uygulamanın veri modelini tutan veritabanına eklenir.Usually this schema is added to the same database that holds the application's data model. SQL Server öğreticide üyelik şemasının oluşturulması , bunu gerçekleştirmek için aspnet_regsql.exe Aracı kullanılarak aranır.The Creating the Membership Schema in SQL Server tutorial looked at using the aspnet_regsql.exe tool to accomplish this.
  3. Web uygulamasının ayarlarını adım 2 ' deki veritabanına başvuracak şekilde özelleştirin.Customize the Web Application's Settings to reference the database from step 2. SQL Server öğreticide Üyelik şeması oluşturma , Web uygulamasını yapılandırmak için iki yol gösterdi. bu sayede, SqlMembershipProvider 2. adım: LocalSqlServer bağlantı dizesi adını değiştirerek bu veritabanı seçilmiş veritabanını kullanacaktır. 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.The Creating the Membership Schema in SQL Server tutorial showed two ways to configure the web application so that the SqlMembershipProvider would use the database selected in step 2: by modifying the LocalSqlServer connection string name; or by adding a new registered provider to the list of Membership framework providers and customizing that new provider to use the database from step 2.

SqlMembershipProvider ve form tabanlı kimlik doğrulaması kullanan bir Web uygulaması oluştururken, Membership sınıfını veya ASP.NET Login Web denetimlerini kullanmadan önce bu üç adımı gerçekleştirmeniz gerekir.When building a web application that uses the SqlMembershipProvider and forms-based authentication, you will need to perform these three steps before using the Membership class or the ASP.NET Login Web controls. Önceki öğreticilerde bu adımları zaten gerçekleştirdiğimiz için, üyelik çerçevesini kullanmaya başlamaya hazırız!Since we already performed these steps in previous tutorials, we are ready to start using the Membership framework!

1. Adım: yeni ASP.NET sayfaları eklemeStep 1: Adding New ASP.NET Pages

Bu öğreticide ve sonraki üç, üyelikte ilgili çeşitli işlevleri ve özellikleri inceleyeceğiz.In this tutorial and the next three we will be examining various Membership-related functions and capabilities. Bu öğreticiler genelinde incelenen konuları uygulamak için bir dizi ASP.NET sayfasına ihtiyacımız olacak.We will need a series of ASP.NET pages to implement the topics examined throughout these tutorials. Bu sayfaları ve sonra bir site haritası dosyası (Web.sitemap)oluşturalım.Let's create those pages and then a site map file (Web.sitemap).

Membershipadlı projede yeni bir klasör oluşturarak başlayın.Start by creating a new folder in the project named Membership. Sonra, Membership klasöre beş yeni ASP.NET sayfası ekleyerek her sayfayı Site.master ana sayfayla bağlantılandırın.Next, add five new ASP.NET pages to the Membership folder, linking each page with the Site.master master page. Sayfaları adlandırın:Name the pages:

  • 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.At this point your project's Solution Explorer should look similar to the screen shot shown in Figure 1.

Üyelik klasörüne beş yeni sayfa eklenmiştirFive New Pages Have Been Added to the Membership Folder

Şekil 1: Membership klasöre beş yeni sayfa eklenmiştir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 1: Five New Pages Have Been Added to the Membership Folder (Click to view full-size image)

Her sayfa, her bir ana sayfanın Contenttutucuları: MainContent ve LoginContentolmak üzere iki Içerik denetimine sahip olmalıdır.Each page should, at this point, have the two Content controls, one for each of the master page's ContentPlaceHolders: MainContent and LoginContent.

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

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

LoginContent ContentPlaceHolder 'ın varsayılan biçimlendirmesinin, kullanıcının kimliğinin doğrulanmadığına bağlı olarak, oturum açma veya site oturumunu kapatma bağlantısı görüntülediğini geri çekin.Recall that the LoginContent ContentPlaceHolder's default markup displays a link to log on or log off the site, depending on whether the user is authenticated. Ancak Content2 Içerik denetiminin varlığı, ana sayfanın varsayılan işaretlemesini geçersiz kılar.The presence of the Content2 Content control, however, overrides the master page's default markup. 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.As we discussed in An Overview of Forms Authentication tutorial, this is useful in pages where we do not want to display login-related options in the left column.

Bununla birlikte, bu beş sayfa için ana sayfanın varsayılan biçimlendirmesini LoginContent ContentPlaceHolder olarak göstermek istiyoruz.For these five pages, however, we want to show the master page's default markup for the LoginContent ContentPlaceHolder. Bu nedenle, Content2 Içerik denetimi için bildirim temelli biçimlendirmeyi kaldırın.Therefore, remove the declarative markup for the Content2 Content control. Bunu yaptıktan sonra, beş sayfa biçimlendirmesinin her biri yalnızca bir Içerik denetimi içermelidir.After doing so, each of the five page's markup should contain just one Content control.

2. Adım: site haritasını oluşturmaStep 2: Creating the Site Map

Ancak, en önemsiz Web sitelerinin bir kullanıcı arabirimi formu uygulaması gerekir.All but the most trivial websites need to implement some form of a navigational user interface. Gezinti Kullanıcı arabirimi, sitenin çeşitli bölümlerine yönelik bağlantıların basit bir listesi olabilir.The navigation user interface may be a simple list of links to the various sections of the site. Alternatif olarak, bu bağlantılar menülerde veya ağaç görünümlerinde düzenlenebilir.Alternatively, these links may be arranged into menus or tree views. Sayfa geliştiricileri olarak, Gezinti Kullanıcı arabirimini oluşturmak öykünün yalnızca yarısıdır.As page developers, creating the navigational user interface is only half of the story. 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.We also need some means to define the site's logical structure in a maintainable and updateable fashion. 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.As new pages are added or existing pages removed, we want to be able to update a single source – the site map – and have those modifications reflected across the site's navigational user interface.

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.These two tasks – defining the site map and implementing a navigational user interface based on the site map – are easy to accomplish thanks to the Site Map framework and the Navigation Web controls added in ASP.NET version 2.0. 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.The Site Map framework allows for a developer to define a site map and then to access it through a programmatic API (the SiteMap class). Yerleşik gezinti Web denetimleri, bir menü denetimi, TreeView denetimive bir Denetimlistesini içerir.The built-in Navigation Web controls include a Menu control, the TreeView control, and the SiteMapPath control.

Üyelik ve rol çerçeveleri gibi, site haritası çerçevesi de sağlayıcı modelinegöre oluşturulmuştur.Like the Membership and Roles frameworks, the Site Map framework is built atop the provider model. Site haritası sağlayıcısı sınıfının işi, bir XML dosyası veya veritabanı tablosu gibi kalıcı bir veri deposundan SiteMap sınıfı tarafından kullanılan bellek içi yapıyı oluşturmak için kullanılır.The job of the Site Map provider class is to generate the in-memory structure used by the SiteMap class from a persistent data store, such as an XML file or a database table. .NET Framework, bir XML dosyasından (XmlSiteMapProvider) site haritası verilerini okuyan varsayılan bir site haritası sağlayıcısıyla birlikte gelir ve bu öğreticide kullanacağız sağlayıcıdır.The .NET Framework ships with a default Site Map provider that reads the site map data from an XML file (XmlSiteMapProvider), and this is the provider we will be using in this tutorial. Bazı alternatif site haritası sağlayıcısı uygulamaları için, Bu öğreticinin sonundaki diğer okumalar bölümüne bakın.For some alternate Site Map provider implementations, refer to the Further Readings section at the end of this tutorial.

Varsayılan site haritası sağlayıcısı, Web.sitemap adlı doğru biçimli bir XML dosyasının kök dizine sahip olmasını bekler.The default Site Map provider expects a properly-formatted XML file named Web.sitemap to exist the root directory. 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.Since we are using this default provider, we need to add such a file and define the site map's structure in the appropriate XML format. Dosyayı eklemek için Çözüm Gezgini içindeki proje adına sağ tıklayın ve yeni öğe Ekle ' yi seçin.To add the file, right-click on the project name in Solution Explorer and choose Add New Item. İletişim kutusunda, Web.sitemapadlı site haritası türünde bir dosya eklemeyi tercih edin.From the dialog box, opt to add a file of type Site Map named Web.sitemap.

, projenin kök dizinine Web. sitemap adlı bir dosya ekleyinAdd a File Named Web.sitemap to the Project's Root Directory

Şekil 2: projenin kök dizinine Web.sitemap adlı bir dosya ekleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 2: Add a File Named Web.sitemap to the Project's Root Directory (Click to view full-size image)

XML site eşleme dosyası Web sitesinin yapısını hiyerarşi olarak tanımlar.The XML site map file defines the website's structure as a hierarchy. Bu hiyerarşik ilişki, XML dosyasında <siteMapNode> öğelerinin ancei aracılığıyla modellenir.This hierarchical relationship is modeled in the XML file via the ancestry of the <siteMapNode> elements. Web.sitemap, tam olarak bir <siteMapNode> alt öğesi olan <siteMap> bir üst düğüm ile başlamalıdır.The Web.sitemap must start with a <siteMap> parent node that has precisely one <siteMapNode> child. Bu üst düzey <siteMapNode> öğesi hiyerarşinin kökünü temsil eder ve rastgele sayıda alt düğüm içerebilir.This top-level <siteMapNode> element represents the root of the hierarchy, and may have an arbitrary number of descendent nodes. Her <siteMapNode> öğesi bir title özniteliği içermeli ve isteğe bağlı olarak, diğerleri arasında url ve description özniteliklerini de içerebilir; boş olmayan her bir url özniteliği benzersiz olmalıdır.Each <siteMapNode> element must include a title attribute and may optionally include url and description attributes, among others; each non-empty url attribute must be unique.

Aşağıdaki XML 'i Web.sitemap dosyasına girin:Enter the following XML into the Web.sitemap file:

<?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.The above site map markup defines the hierarchy shown in Figure 3.

Site Haritası hiyerarşik bir gezinti yapısını temsil The Site Map Represents a Hierarchical Navigational Structure

Ş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)Figure 3: The Site Map Represents a Hierarchical Navigational Structure (Click to view full-size image)

3. Adım: Ana sayfayı bir gezinti kullanıcı arabirimi Içerecek şekilde güncelleştirmeStep 3: Updating the Master Page to Include a Navigational User Interface

ASP.NET, bir kullanıcı arabirimi tasarlamak için bir dizi gezinmede ilgili Web denetimi içerir.ASP.NET includes a number of navigation-related Web controls for designing a user interface. Bunlar menü, TreeView ve, bu denetimleri içerir.These include the Menu, TreeView, and the SiteMapPath controls. 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.The Menu and TreeView controls render the site map structure in a menu or a tree, respectively, whereas the SiteMapPath displays a breadcrumb that shows the current node being visited as well as its ancestors. Site haritası verileri, SiteMapDataSource kullanılarak diğer veri Web denetimlerine bağlanabilir ve SiteMap sınıfı aracılığıyla programlı olarak erişilebilir.The site map data can be bound to other data Web controls using the SiteMapDataSource and can be accessed programmatically via the SiteMap class.

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 .Since a thorough discussion of the Site Map framework and the Navigation controls is beyond the scope of this tutorial series, rather than spend time crafting our own navigational user interface let's instead borrow the one used in my Working with Data in ASP.NET 2.0 tutorial series, which uses a Repeater control to display a two-deep bulleted list of navigation links, as shown in Figure 4.

Bu arabirimi oluşturmak için, aşağıdaki bildirime dayalı işaretlemeyi Site.master ana sayfanın sol sütununa ekleyin ve bu metnin "TODO: Menu buraya gidecektir..." Şu anda bulunuyor.To create this interface, add the following declarative markup to the Site.master master page's left column where the text "TODO: Menu will go here..." currently resides.

<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 adlı bir yineleyici denetimini, Web.sitemaptanımlanan site haritası hiyerarşisini döndüren bir SiteMapDataSource 'a bağlar.The above markup binds a Repeater control named menu to a SiteMapDataSource, which returns the site map hierarchy defined in 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.Since the SiteMapDataSource control's ShowStartingNode property is set to False it starts returning the site map's hierarchy starting with the descendents of the "Home" node. Yineleyici, bu düğümlerin her birini (Şu anda yalnızca "Üyelik") bir <li> öğesinde görüntüler.The Repeater displays each of these nodes (currently just "Membership") in an <li> element. 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.Another, inner Repeater then displays the current node's children in a nested unordered list.

Ş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.Figure 4 shows the above markup's rendered output with the site map structure we created in Step 2. Yineleyici, Vanilla sırasız liste işaretlemesini oluşturur; Styles.css ' de tanımlanan geçişli stil sayfası kuralları, aesthetik-pkiralama düzeninden sorumludur.The Repeater renders vanilla unordered list markup; the cascading style sheet rules defined in Styles.css are responsible for the aesthetically-pleasing layout. 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.For a more detailed description of how the above markup works, refer to the Master Pages and Site Navigation tutorial.

Gezinti Kullanıcı arabirimi , Iç Içe sıralanmamış listeler kullanılarak IşlenirThe Navigational User Interface is Rendered Using Nested Unordered Lists

Ş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)Figure 4: The Navigational User Interface is Rendered Using Nested Unordered Lists (Click to view full-size image)

Içerik Haritası gezintisi eklemeAdding Breadcrumb Navigation

Sol sütundaki bağlantıların listesine ek olarak, her sayfanın bir içerik haritasıgörüntülemesini de sağlayabilirsiniz.In addition to the list of links in the left column, let's also have each page display a breadcrumb. 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.A breadcrumb is a navigational user interface element that quickly shows users their current position within the site hierarchy. 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.The SiteMapPath control uses the Site Map framework to determine the current page's location in the site map and then displays a breadcrumb based on this information.

Özellikle, ana sayfanın üstbilgi <div> öğesine bir <span> öğesi ekleyin ve yeni <span> öğesinin class özniteliğini "içerik haritası" olarak ayarlayın.Specifically, add a <span> element to the master page's header <div> element, and set the new <span> element's class attribute to "breadcrumb". (Styles.css sınıfı bir "içerik haritası" sınıfı için bir kural içerir.) Sonra, bu yeni <span> öğesine bir bir bir bir bir II ekleyin.(The Styles.css class contains a rule for a "breadcrumb" class.) Next, add a SiteMapPath to this new <span> element.

<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 ~/Membership/CreatingUserAccounts.aspxziyaret edildiğinde, bu değer ' in çıktısını gösterir.Figure 5 shows the output of the SiteMapPath when visiting ~/Membership/CreatingUserAccounts.aspx.

Içerik Haritası , geçerli sayfayı ve onun üst öğelerini site haritasında görüntülerThe Breadcrumb Displays the Current Page and its Ancestors in the Site Map

Ş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)Figure 5: The Breadcrumb Displays the Current Page and its Ancestors in the Site Map (Click to view full-size image)

4. Adım: özel sorumluyu ve kimlik mantığını kaldırmaStep 4: Removing the Custom Principal and Identity Logic

Forms kimlik doğrulaması yapılandırması ve gelişmiş konular öğreticisinde, özel sorumlunun ve kimlik nesnelerinin kimliği doğrulanmış kullanıcıyla nasıl ilişkilendirileceğini gördük.In the Forms Authentication Configuration and Advanced Topics tutorial we saw how to associate custom principal and identity objects to the authenticated user. Bunu, uygulamanın PostAuthenticateRequest olayı için Global.asax bir olay işleyicisi oluşturarak yaptık FormsAuthenticationModule kimliği doğrulandıktan sonra harekete geçirilir.We accomplished this by creating an event handler in Global.asax for the application's PostAuthenticateRequest event, which fires after the FormsAuthenticationModule has authenticated the user. Bu olay işleyicisinde, FormsAuthenticationModule tarafından eklenen GenericPrincipal ve FormsIdentity nesneleri, bu öğreticide oluşturduğumuz CustomPrincipal ve CustomIdentity nesneleriyle değiştirdik.In this event handler we replaced the GenericPrincipal and FormsIdentity objects added by the FormsAuthenticationModule with the CustomPrincipal and CustomIdentity objects we created in that tutorial.

Özel asıl ve kimlik nesneleri belirli senaryolarda faydalıdır, çoğu durumda GenericPrincipal ve FormsIdentity nesneleri yeterlidir.While custom principal and identity objects are useful in certain scenarios, in most cases the GenericPrincipal and FormsIdentity objects are sufficient. Sonuç olarak, varsayılan davranışa geri dönebileceğimizi düşündüm.Consequently, I think it would be worthwhile to return to the default behavior. PostAuthenticateRequest olay işleyicisini kaldırarak veya yorum yaparak ya da Global.asax dosyasını tamamen silerek bu değişikliği yapın.Make this change by either removing or commenting out the PostAuthenticateRequest event handler or by deleting the Global.asax file entirely.

5. Adım: program aracılığıyla yeni bir Kullanıcı oluşturmaStep 5: Programmatically Creating a New User

Üyelik çerçevesi aracılığıyla yeni bir kullanıcı hesabı oluşturmak için Membership sınıfının CreateUser yönteminikullanın.To create a new user account through the Membership framework use the Membership class's CreateUser method. Bu yöntemin Kullanıcı adı, parola ve kullanıcıyla ilgili diğer alanlar için giriş parametreleri vardır.This method has input parameters for the username, password, and other user-related fields. Ç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 oluşturulan kullanıcı hesabını temsil eden bir MembershipUser nesnesi döndürür.On invocation, it delegates the creation of the new user account to the configured Membership provider and then returns a MembershipUser object representing the just-created user account.

CreateUser yönteminin, her biri farklı sayıda giriş parametresi kabul eden dört aşırı yüklemesi vardır:The CreateUser method has four overloads, each accepting a different number of input parameters:

Bu dört aşırı yükleme, toplanan bilgi miktarına göre farklılık gösterir.These four overloads differ on the amount of information that is collected. Ö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.The first overload, for example, requires just the username and password for the new user account, whereas the second one also requires the user's email address.

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.These overloads exist because the information needed to create a new user account depends on the Membership provider's configuration settings. SQL Server içinde üyelik şeması oluşturma öğreticisinde, Web.configüyelik sağlayıcısı yapılandırma ayarlarını belirtmeyi inceledik.In the Creating the Membership Schema in SQL Server tutorial we examined specifying Membership provider configuration settings in Web.config. Tablo 2, yapılandırma ayarlarının kapsamlı bir listesini içeriyordu.Table 2 included a complete list of the configuration settings.

CreateUser aşırı yüklerini etkileyebilecek bir üyelik sağlayıcısı yapılandırma ayarı requiresQuestionAndAnswer ayardır.One such Membership provider configuration setting that impacts what CreateUser overloads may be used is the requiresQuestionAndAnswer setting. requiresQuestionAndAnswer true (varsayılan) olarak ayarlandıysa, yeni bir kullanıcı hesabı oluştururken bir güvenlik sorusu ve yanıtı belirtmemiz gerekir.If requiresQuestionAndAnswer is set to true (the default), then when creating a new user account we must specify a security question and answer. 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.This information is later used if the user needs to reset or change their password. Ö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.Specifically, at that time they are shown the security question and they must enter the correct answer in order to reset or change their password. Sonuç olarak, requiresQuestionAndAnswer true olarak ayarlanırsa ilk iki CreateUser aşırı yüklemesinin çağrılması, güvenlik sorusu ve yanıtı eksik olduğu için bir özel duruma neden olur.Consequently, if the requiresQuestionAndAnswer is set to true then calling either of the first two CreateUser overloads results in an exception because the security question and answer are missing. 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.Since our application is currently configured to require a security question and answer, we will need to use one of the latter two overloads when creating user's programmatically.

CreateUser yönteminin kullanımını anlamak için 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.To illustrate using the CreateUser method, let's create a user interface where we prompt the user for their name, password, email, and an answer to a pre-defined security question. Membership klasöründeki CreatingUserAccounts.aspx sayfasını açın ve Içerik denetimine aşağıdaki Web denetimlerini ekleyin:Open the CreatingUserAccounts.aspx page in the Membership folder and add the following Web controls to the Content control:

  • Username adlı bir metin kutusuA TextBox named Username
  • TextMode özelliği Password olarak ayarlanmış Passwordadlı bir metin kutusuA TextBox named Password, whose TextMode property is set to Password
  • Email adlı bir metin kutusuA TextBox named Email
  • Text özelliği temizlenmiş SecurityQuestion adlı bir etiketA Label named SecurityQuestion with its Text property cleared out
  • SecurityAnswer adlı bir metin kutusuA TextBox named SecurityAnswer
  • Metin özelliği "Kullanıcı hesabını oluşturma" olarak ayarlanmış CreateAccountButton adlı düğmeA Button named CreateAccountButton whose Text property is set to "Create the User Account"
  • Text özelliği temizlenmiş CreateAccountResults adlı bir etiket denetimiA Label control named CreateAccountResults with its Text property cleared out

Bu noktada, ekranınızda Şekil 6 ' da gösterilen ekran görüntüsüne benzer görünmelidir.At this point your screen should look similar to the screen shot shown in Figure 6.

Çeşitli Web denetimlerini CreatingUserAccounts. aspx sayfasına eklemek Add the Various Web Controls to the CreatingUserAccounts.aspx Page

Şekil 6: CreatingUserAccounts.aspx sayfasına çeşitli Web denetimleri ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 6: Add the Various Web Controls to the CreatingUserAccounts.aspx Page (Click to view full-size image)

SecurityQuestion etiketi 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.The SecurityQuestion Label and SecurityAnswer TextBox are intended to display a pre-defined security question and collect the user's answer. 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.Note that both the security question and answer are stored on a user-by-user basis, so it is possible to allow each user to define their own security question. Ancak, bu örnekte bir Evrensel güvenlik sorusu kullanmaya karar verdim: "en sevdiğiniz renk nedir?"However, for this example I have decided to use a universal security question, namely: "What is your favorite color?"

Bu önceden tanımlı güvenlik sorusunu uygulamak için, passwordQuestionadlı sayfanın arka plan kodu sınıfına bir sabit ekleyin, bu, güvenlik sorusu atayarak.To implement this pre-defined security question, add a constant to the page's code-behind class named passwordQuestion, assigning it the security question. Ardından, Page_Load olay işleyicisinde, bu sabiti SecurityQuestion etiketinin Text özelliğine atayın:Then, in the Page_Load event handler, assign this constant to the SecurityQuestion Label's Text property:

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

Sonra, CreateAccountButton``Click olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:Next, create an event handler for the CreateAccountButton's Click event and add the following code:

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;
     }
}

Click olay işleyicisi, MembershipCreateStatustüründe createStatus adlı bir değişken tanımlayarak başlar.The Click event handler starts by defining a variable named createStatus of type MembershipCreateStatus. MembershipCreateStatus, CreateUser işleminin durumunu gösteren bir numaralandırmadır.MembershipCreateStatus is an enumeration that indicates the status of the CreateUser operation. Örneğin, Kullanıcı hesabı başarıyla oluşturulursa, sonuçta elde edilen MembershipCreateStatus örneği Successbir değere ayarlanır; Diğer taraftan, aynı kullanıcı adına sahip bir kullanıcı zaten varolduğundan, işlem başarısız olursa, DuplicateUserNamebir değere ayarlanır.For example, if the user account is created successfully, the resulting MembershipCreateStatus instance will be set to a value of Success; on the other hand, if the operation fails because there already exists a user with the same username, it will be set to a value of DuplicateUserName. Kullandığımız CreateUser aşırı yüklemede, bir MembershipCreateStatus örneğini bir out parametresi olarak metoduna geçirmemiz gerekir.In the CreateUser overload we use, we need to pass a MembershipCreateStatus instance into the method as an out parameter. Bu parametre CreateUser yöntemi içinde uygun değere ayarlanır 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.This parameter is set to the appropriate value within the CreateUser method, and we can examine its value after the method call to determine whether the user account was successfully created.

CreateUserçağrıldıktan sonra, createStatusgeçirilerek, createStatusatanan değere bağlı olarak uygun bir iletiyi çıkarmak için switch bir ifade kullanılır.After calling CreateUser, passing in createStatus, a switch statement is used to output an appropriate message depending on the value assigned to createStatus. Şekil 7 ' de Yeni Kullanıcı başarıyla oluşturulduğunda çıkış görüntülenir.Figures 7 shows the output when a new user has successfully been created. Şekil 8 ve 9 Kullanıcı hesabı oluşturulmadıysa çıktıyı gösterir.Figures 8 and 9 show the output when the user account is not created. Ş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.In Figure 8, the visitor entered a five-letter password, which does not meet the password strength requirements spelled out in the Membership provider's configuration settings. Şekil 9 ' da, ziyaretçi mevcut Kullanıcı adı (Şekil 7 ' de oluşturulmuştur) ile bir kullanıcı hesabı oluşturmaya çalışıyor.In Figure 9, the visitor is attempting to create a user account with an existing username (the one created in Figure 7).

yeni bir kullanıcı hesabı başarıyla oluşturulduA New User Account is Successfully Created

Ş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)Figure 7: A New User Account is Successfully Created (Click to view full-size image)

Sağlanan parola çok zayıf olduğundan kullanıcı hesabı oluşturulmamışThe User Account is Not Created Because the Supplied Password is Too Weak

Ş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)Figure 8: The User Account is Not Created Because the Supplied Password is Too Weak (Click to view full-size image)

Kullanıcı hesabı, Kullanıcı adı zaten kullanımda olduğu için oluşturulmazThe User Account is Not Created Because the Username is Already in Use

Ş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)Figure 9: The User Account is Not Created Because the Username is Already in Use (Click to view full-size image)

Note

İlk iki CreateUser yöntemi aşırı yüklemeden birini kullanırken başarıyı veya hatanın nasıl belirleneceğini merak ediyor olabilirsiniz; hiçbiri MembershipCreateStatustüründe bir parametreye sahip değildir.You may be wondering how to determine success or failure when using one of the first two CreateUser method overloads, neither of which has a parameter of type MembershipCreateStatus. Bu ilk iki aşırı yükleme, hata durumunda MembershipCreateStatustüründe bir StatusCode özelliği içeren MembershipCreateUserException bir özel durum oluşturur.These first two overloads throw a MembershipCreateUserException exception in the face of a failure, which includes a StatusCode property of type MembershipCreateStatus.

Birkaç kullanıcı hesabı oluşturduktan sonra, SecurityTutorials.mdf veritabanındaki aspnet_Users ve aspnet_Membership tablolarının içeriğini listeleyerek hesapların oluşturulduğunu doğrulayın.After creating a few user accounts, verify that the accounts have been created by listing the contents of the aspnet_Users and aspnet_Membership tables in the SecurityTutorials.mdf database. Şekil 10 ' u gösterdiği gibi, CreatingUserAccounts.aspx sayfa: Tito ve Bruce aracılığıyla iki Kullanıcı ekledik.As Figure 10 shows, I have added two users via the CreatingUserAccounts.aspx page: Tito and Bruce.

üyelik kullanıcı deposunda Iki kullanıcı vardır: Tito ve deneme CEThere are Two Users in the Membership User Store: Tito and Bruce

Ş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)Figure 10: There are Two Users in the Membership User Store: Tito and Bruce (Click to view full-size image)

Ü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.While the Membership user store now includes Bruce and Tito's account information, we have yet to implement functionality that allows for Bruce or Tito to log on to the site. Ş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.Currently, Login.aspx validates the user's credentials against a hard-coded set of username/password pairs – it does not validate the supplied credentials against the Membership framework. Artık aspnet_Users Yeni Kullanıcı hesaplarını görmek için aspnet_Membership tablolarda yeterli bir işlem olması gerekir.For now seeing the new user accounts in the aspnet_Users and aspnet_Membership tables will have to suffice. 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.In the next tutorial, Validating User Credentials Against the Membership User Store, we will update the login page to validate against the Membership store.

Note

SecurityTutorials.mdf veritabanınızda hiç Kullanıcı görmüyorsanız, bunun nedeni Web uygulamanızın kullanıcı deposu olarak ASPNETDB.mdf veritabanını kullanan varsayılan üyelik AspNetSqlMembershipProvidersağlayıcısını kullanıyor olması olabilir.If you do not see any users in your SecurityTutorials.mdf database, it may be because your web application is using the default Membership provider, AspNetSqlMembershipProvider, which uses the ASPNETDB.mdf database as its user store. Sorunun bu olup olmadığını anlamak için Çözüm Gezgini Yenile düğmesine tıklayın.To determine if this is the problem, click the Refresh button in the Solution Explorer. App_Data klasörüne ASPNETDB.mdf adlı bir veritabanı eklendiyse, bu sorun budur.If a database named ASPNETDB.mdf has been added to the App_Data folder, this is the problem. Ü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.Return to Step 4 of the Creating the Membership Schema in SQL Server tutorial for instructions on how to properly configure the Membership provider.

Ç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.In most create user account scenarios, the visitor is presented with some interface to enter their username, password, email, and other essential information, at which point a new account is created. Bu adımda, bu tür bir arabirimi el ile oluşturmaya ve ardından Kullanıcı girişlerini temel alarak yeni kullanıcı hesabını programlı olarak eklemek için Membership.CreateUser yönteminin nasıl kullanılacağını gördük.In this step we looked at building such an interface by hand and then saw how to use the Membership.CreateUser method to programmatically add the new user account based on the user's inputs. Ancak, kodumuz Yeni Kullanıcı hesabını oluşturmuş olmanız yeterlidir.Our code, however, just created the new user account. 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.It did not perform any follow up actions, like logging in the user to the site under the just-created user account, or sending a confirmation email to the user. Bu ek adımlar, düğmenin Click olay işleyicisinde ek kod gerektirir.These additional steps would require additional code in the Button's Click event handler.

ASP.NET, Kullanıcı hesabı oluşturma işlemini işlemek için tasarlanan CreateUserWizard denetimiyle birlikte gelir, bu, Yeni Kullanıcı hesapları oluşturmak için bir kullanıcı arabirimi oluşturmayı, üyelik çerçevesinde hesabı oluşturma ve hesap sonrası gerçekleştirme bir onay e-postası gönderme ve yeni oluşturulan kullanıcıyı siteye kaydetme gibi oluşturma görevleri.ASP.NET ships with the CreateUserWizard control, which is designed to handle the user account creation process, from rendering a user interface for creating new user accounts, to creating the account in the Membership framework and performing post-account creation tasks, such as sending a confirmation email and logging the just-created user into the site. CreateUserWizard denetimini kullanarak, CreateUserWizard denetimini araç kutusundan bir sayfaya sürüklemek ve sonra birkaç özellik ayarlamak kadar basittir.Using the CreateUserWizard control is as simple as dragging the CreateUserWizard control from the Toolbox onto a page, and then setting a few properties. Çoğu durumda, tek satırlık bir kod yazmanız gerekmez.In most cases, you won't need to write a single line of code. Bu nifty denetimini adım 6 ' da ayrıntılı olarak araştıracağız.We will explore this nifty control in detail in Step 6.

Yeni Kullanıcı hesapları yalnızca tipik bir hesap oluşturma Web sayfası aracılığıyla oluşturulduysa, CreateUserWizard denetimi gereksinimlerinize uygun olduğu için CreateUser yöntemini kullanan kodu yazmanız gerekmez.If new user accounts are only created through a typical Create Account web page, it is unlikely that you will ever need to write code that uses the CreateUser method, as the CreateUserWizard control will likely meet your needs. Ancak CreateUser yöntemi, 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.However, the CreateUser method is handy in scenarios where you need a highly customized Create Account user experience or when you need to programmatically create new user accounts through an alternative interface. Ö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.For example, you might have a page that allows a user to upload an XML file that contains user information from some other application. Sayfa, karşıya yüklenen XML dosyasının içeriğini ayrıştırır ve CreateUser yöntemini çağırarak XML 'de temsil edilen her bir kullanıcı için yeni bir hesap oluşturabilir.The page might parses the contents of the uploaded XML file and create a new account for each user represented in the XML by calling the CreateUser method.

6. Adım: CreateUserWizard denetimiyle yeni bir Kullanıcı oluşturmaStep 6: Creating a New User with the CreateUserWizard Control

ASP.NET, bir dizi oturum açma Web denetimi ile birlikte sunulur.ASP.NET ships with a number of Login Web controls. Bu denetimler birçok ortak kullanıcı hesabı ve oturum açmayla ilgili senaryolar konusunda yardımcı olur.These controls aid in many common user account- and login-related scenarios. CreateUserWizard denetimi , üyelik çerçevesine yeni bir kullanıcı hesabı eklemek için bir kullanıcı arabirimi sunmak üzere tasarlanan bir denetimdir.The CreateUserWizard control is one such control that is designed to present a user interface for adding a new user account to the Membership framework.

Diğer oturumla ilgili Web denetimlerinin birçoğu gibi, CreateUserWizard tek bir kod satırı yazmadan kullanılabilir.Like many of the other Login-related Web controls, the CreateUserWizard can be used without writing a single line of code. BT Intuit, üyelik sağlayıcısının yapılandırma ayarlarını temel alan bir kullanıcı arabirimi sağlar ve Kullanıcı gerekli bilgileri girdikten sonra "Kullanıcı Oluştur" düğmesine tıkladıktan sonra Membership sınıfının CreateUser yöntemini dahili olarak çağırır.It intuitively provides a user interface based on the Membership provider's configuration settings and internally calls the Membership class's CreateUser method after the user enters the necessary information and clicks the "Create User" button. CreateUserWizard denetimi son derece özelleştirilebilir.The CreateUserWizard control is extremely customizable. Hesap oluşturma işleminin çeşitli aşamaları sırasında tetiklenen bir olay ana bilgisayarı vardır.There are a host of events that fire during various stages of the account creation process. Hesap oluşturma iş akışına özel mantık eklemek için gerektiğinde olay işleyicileri oluşturuyoruz.We can create event handlers, as needed, to inject custom logic into the account creation workflow. Ayrıca, CreateUserWizard 'in görünümü çok esnektir.Furthermore, the CreateUserWizard's appearance is very flexible. 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.There are a number of properties that define the appearance of the default interface; if necessary, the control can be converted into a template or additional user registration "steps" may be added.

CreateUserWizard denetiminin varsayılan arabirimini ve davranışını kullanarak bir bakalım başlayalım.Let's start with a look at using the CreateUserWizard control's default interface and behavior. Daha sonra denetimin özellikler ve olaylar aracılığıyla görünümün nasıl özelleştirileceğini keşfedeceğiz.We'll then explore how to customize the appearance via the control's properties and events.

CreateUserWizard 'in varsayılan arabirimini ve davranışını İncelemeExamining the CreateUserWizard's Default Interface and Behavior

Membership klasöründeki CreatingUserAccounts.aspx sayfasına dönün, tasarım veya bölme moduna geçin ve ardından sayfanın en üstüne bir CreateUserWizard denetimi ekleyin.Return to the CreatingUserAccounts.aspx page in the Membership folder, switch to the Design or Split mode, and then add a CreateUserWizard control to the top of the page. CreateUserWizard denetimi, araç kutusunun oturum açma denetimleri bölümünün altında dosyalanır.The CreateUserWizard control is filed under the Toolbox's Login controls section. Denetim eklendikten sonra, ID özelliğini RegisterUserolarak ayarlayın.After adding the control, set its ID property to 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.As the screen shot in Figure 11 shows, the CreateUserWizard renders an interface with textboxes for the new user's username, password, email address, and security question and answer.

CreateUserWizard denetimi bir genel Kullanıcı oluşturma arabirimi Işler The CreateUserWizard Control Renders a Generic Create User Interface

Ş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)Figure 11: The CreateUserWizard Control Renders a Generic Create User Interface (Click to view full-size image)

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.Let's take a moment to compare the default user interface generated by the CreateUserWizard control with the interface we created in Step 5. 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ı.For starters, the CreateUserWizard control allows the visitor to specify both the security question and answer, whereas our manually-created interface used a pre-defined security question. CreateUserWizard denetiminin arabirimi doğrulama denetimlerini de içerir, ancak henüz arabirimimizin form alanlarında doğrulama uygulamamız gerekiyordu.The CreateUserWizard control's interface also includes validation controls, whereas we had yet to implement validation on our interface's form fields. 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.And the CreateUserWizard control interface includes a "Confirm Password" textbox (along with a CompareValidator to ensure that the text entered the "Password" and "Compare Password" textboxes are equal).

CreateUserWizard denetimi, Kullanıcı arabirimini işlerken üyelik sağlayıcısının yapılandırma ayarlarını danışmandır.What's interesting is that the CreateUserWizard control consults the Membership provider's configuration settings when rendering its user interface. Örneğin, güvenlik sorusu ve yanıt metin kutuları yalnızca requiresQuestionAndAnswer true olarak ayarlandıysa görüntülenir.For example, the security question and answer textboxes are only displayed if requiresQuestionAndAnswer is set to True. Benzer şekilde, CreateUserWizard, parola düzeyi gereksinimlerinin karşılanmasını sağlamak için otomatik olarak bir RegularExpressionValidator denetimi ekler ve minRequiredPasswordLength, minRequiredNonalphanumericCharactersve passwordStrengthRegularExpression yapılandırma ayarlarına göre ErrorMessage ve ValidationExpression özelliklerini ayarlar.Likewise, CreateUserWizard automatically adds a RegularExpressionValidator control to ensure that the password strength requirements are met, and sets its ErrorMessage and ValidationExpression properties based on the minRequiredPasswordLength, minRequiredNonalphanumericCharacters, and passwordStrengthRegularExpression configuration settings.

CreateUserWizard denetimi, adı gösterdiği gibi, sihirbaz denetimindentüretilir.The CreateUserWizard control, as its name implies, is derived from the Wizard control. Sihirbaz denetimleri, çok adımlı görevleri tamamlamak için bir arabirim sağlamak üzere tasarlanmıştır.Wizard controls are designed to provide an interface for completing multi-step tasks. Bir sihirbaz denetimi, her biri, bu adım için HTML ve Web denetimlerini tanımlayan bir şablon olan rastgele sayıda WizardStepssahip olabilir.A Wizard control may have an arbitrary number of WizardSteps, each of which is a template that defines the HTML and Web controls for that step. Sihirbaz denetimi başlangıçta ilk WizardStep, kullanıcının bir adımdan sonrakine geçmesini veya önceki adımlara geri dönmesini sağlayan gezinti denetimleriyle birlikte görüntüler.The Wizard control initially displays the first WizardStep, along with navigation controls that permit the user to proceed from one step to the next, or to return to previous steps.

Şekil 11 ' de bildirim temelli biçimlendirme olarak, CreateUserWizard denetiminin varsayılan arabirimi iki WizardSteps: içerirAs the declarative markup in Figure 11 shows, the CreateUserWizard control's default interface includes two WizardSteps:

  • CreateUserWizardStep : arabirimi yeni kullanıcı hesabı oluşturmak için bilgi toplayacak şekilde işler.CreateUserWizardStep – renders the interface to collect information for creating the new user account. Bu adım Şekil 11 ' de gösterilmektedir.This is the step shown in Figure 11.
  • CompleteWizardStep : hesabın başarıyla oluşturulduğunu belirten bir ileti işler.CompleteWizardStep – renders a message indicating that the account has successfully been created.

CreateUserWizard 'in görünümü ve davranışı, bu adımların herhangi biri şablonlara veya kendi WizardStepseklenerek değiştirilebilir.The CreateUserWizard's appearance and behavior can be modified by converting either of these steps to templates, or by adding your own WizardSteps. Ek kullanıcı bilgilerini depolama öğreticisindeki kayıt arabirimine bir WizardStep ekleme hakkında bilgi göndereceğiz.We will look at adding a WizardStep to the registration interface in the Storing Additional User Information tutorial.

CreateUserWizard denetimini görelim.Let's see the CreateUserWizard control in action. CreatingUserAccounts.aspx sayfasını bir tarayıcıda ziyaret edin.Visit the CreatingUserAccounts.aspx page through a browser. CreateUserWizard 'un arabirimine bazı geçersiz değerler girerek başlayın.Start by entering some invalid values into the CreateUserWizard's interface. Parola düzeyi gereksinimleriyle uyumlu olmayan bir parola girmeyi deneyin veya "Kullanıcı adı" metin kutusunu boş bırakın.Try entering a password that doesn't conform to the password strength requirements, or leaving the "User Name" textbox empty. CreateUserWizard uygun bir hata iletisi görüntüler.The CreateUserWizard will display an appropriate error message. Şekil 12 ' de, sınırsız bir güçlü parola ile kullanıcı oluşturmaya çalışırken çıkış gösterilmektedir.Figure 12 shows the output when attempting to create a user with an insufficiently strong password.

CreateUserWizard doğrulama denetimlerini otomatik olarak çıkarırThe CreateUserWizard Automatically Injects Validation Controls

Ş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)Figure 12: The CreateUserWizard Automatically Injects Validation Controls (Click to view full-size image)

Sonra, CreateUserWizard öğesine uygun değerleri girin ve "Kullanıcı Oluştur" düğmesine tıklayın.Next, enter appropriate values into the CreateUserWizard and click the "Create User" button. 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 sonra CompleteWizardSteparabirimini görüntüler (bkz. Şekil 13).Assuming the required fields have been entered and the password's strength is sufficient, the CreateUserWizard will create a new user account through the Membership framework and then display the CompleteWizardStep's interface (see Figure 13). Arka planda CreateUserWizard, tıpkı 5. adımda yaptığımız gibi Membership.CreateUser yöntemini çağırır.Behind the scenes, the CreateUserWizard calls the Membership.CreateUser method, just like we did in Step 5.

yeni bir kullanıcı hesabı başarıyla oluşturulduA New User Account has Successfully Been Created

Ş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)Figure 13: A New User Account has Successfully Been Created (Click to view full-size image)

Note

Şekil 13 ' te gösterildiği gibi, CompleteWizardSteparabirimi devam düğmesi içerir.As Figure 13 shows, the CompleteWizardStep's interface includes a Continue button. Ancak, bu noktada, ziyaretçi yalnızca bir geri gönderme gerçekleştirir ve ziyaretçisini aynı sayfada bırakır.However, at this point clicking it just performs a postback, leaving the visitor on the same page. "CreateUserWizard 'in görünüşünü ve davranışını özellikler aracılığıyla özelleştirme" bölümünde, bu düğmenin ziyaretçisi Default.aspx (veya başka bir sayfa) nasıl gönderebilmesini inceleyeceğiz.In the "Customizing the CreateUserWizard's Appearance and Behavior Through Its Properties" section we will look at how you can have this button send the visitor to Default.aspx (or some other page).

Yeni bir kullanıcı hesabı oluşturduktan sonra, Visual Studio 'ya dönün ve hesabın başarıyla oluşturulduğunu doğrulamak için Şekil 10 ' da yaptığımız gibi aspnet_Users ve aspnet_Membership tabloları inceleyin.After creating a new user account, return to Visual Studio and examine the aspnet_Users and aspnet_Membership tables like we did in Figure 10 to verify that the account was successfully created.

CreateUserWizard 'ın davranışını ve görünümünü özellikler aracılığıyla özelleştirmeCustomizing the CreateUserWizard's Behavior and Appearance Through Its Properties

CreateUserWizard, özellikler, WizardStepsve olay işleyicileri aracılığıyla çeşitli yollarla özelleştirilebilir.The CreateUserWizard can be customized in a variety of ways, through properties, WizardSteps, and event handlers. 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.In this section we will look at how to customize the control's appearance through its properties; the next section looks at extending the control's behavior through event handlers.

CreateUserWizard denetiminin varsayılan kullanıcı arabiriminde görünen metnin neredeyse tamamı, Plethora özellikleri aracılığıyla özelleştirilebilir.Virtually all of the text displayed in the CreateUserWizard control's default user interface can be customized through its plethora of properties. Ö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, QuestionLabelTextve AnswerLabelText özellikleri tarafından özelleştirilebilir.For example, the "User Name", "Password", "Confirm Password", "E-mail", "Security Question", and "Security Answer" labels displayed to the left of the textboxes can be customized by the UserNameLabelText, PasswordLabelText, ConfirmPasswordLabelText, EmailLabelText, QuestionLabelText, and AnswerLabelText properties, respectively. Benzer şekilde, CreateUserWizardStep ve CompleteWizardStep"Kullanıcı Oluştur" ve "devam" düğmelerinin yanı sıra bu düğmelerin düğme, bağlantı düğmeleri veya ImageButton olarak işlenip işlendiğine ilişkin özellikler de mevcuttur.Likewise, there are properties for specifying the text for the "Create User" and "Continue" buttons in the CreateUserWizardStep and CompleteWizardStep, as well as if these buttons are rendered as Buttons, LinkButtons, or ImageButtons.

Renkler, kenarlıklar, yazı tipleri ve diğer görsel öğeleri, bir stil özellikleri konağından yapılandırılabilir.The colors, borders, fonts, and other visual elements are configurable through a host of style properties. CreateUserWizard denetiminin kendisi, ortak Web denetim stili özelliklerine sahiptir – BackColor, BorderStyle, CssClass, Font, vb.) ve CreateUserWizard 'in arabiriminin belirli bölümleri için görünümü tanımlamaya yönelik bir dizi stil özelliği vardır.The CreateUserWizard control itself has the common Web control style properties – BackColor, BorderStyle, CssClass, Font, and so on – and there are a number of style properties for defining the appearance for particular sections of the CreateUserWizard's interface. Örneğin TextBoxStyle özelliği, CreateUserWizardStepmetin kutularının stillerini tanımlar, ancak TitleTextStyle özelliği başlık stilini tanımlar ("yeni hesabınız için kaydolun").The TextBoxStyle property, for instance, defines the styles for the textboxes in the CreateUserWizardStep, while the TitleTextStyle property defines the style for the title ("Sign Up for Your New Account").

Görünümle ilgili özelliklere ek olarak, CreateUserWizard denetiminin davranışını etkileyen bazı özellikler vardır.In addition to the appearance-related properties, there are a number of properties that affect the CreateUserWizard control's behavior. 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).The DisplayCancelButton property, if set to True, displays a Cancel button next to the "Create User" button (the default value is False). 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ğinide ayarladığınızdan emin olun.If you display the Cancel button, be sure to also set the CancelDestinationPageUrl property, which specifies the page the user is sent to after clicking Cancel. Önceki bölümde belirtildiği gibi, CompleteWizardSteparabirimindeki devam düğmesi geri göndermeye neden olur, ancak ziyaretçi aynı sayfada kalır.As noted in the previous section, the Continue button in the CompleteWizardStep's interface causes a postback, but leaves the visitor on the same page. Devam düğmesine tıkladıktan sonra ziyaretçi başka bir sayfaya göndermek için ContinueDestinationPageUrl özelliğindekiURL 'yi belirtmeniz yeterlidir.To send the visitor to some other page after clicking the Continue button, simply specify the URL in the ContinueDestinationPageUrl property.

RegisterUser CreateUserWizard denetimini bir Iptal düğmesi göstermek ve Iptal veya devam düğmesi tıklandığında ziyaretçi Default.aspx göndermek için güncelleştirelim.Let's update the RegisterUser CreateUserWizard control to show a Cancel button and to send the visitor to Default.aspx when the Cancel or Continue buttons are clicked. Bunu gerçekleştirmek için DisplayCancelButton özelliğini true olarak ve hem CancelDestinationPageUrl hem de ContinueDestinationPageUrl özelliklerini "~/default.aspx" olarak ayarlayın.To accomplish this, set the DisplayCancelButton property to True and both the CancelDestinationPageUrl and ContinueDestinationPageUrl properties to "~/Default.aspx". Şekil 14 ' te, bir tarayıcıdan görüntülendiklerinde güncelleştirilmiş CreateUserWizard gösterilmektedir.Figure 14 shows the updated CreateUserWizard when viewed through a browser.

CreateUserWizardStep bir Iptal düğmesi IçerirThe CreateUserWizardStep Includes a Cancel Button

Şekil 14: CreateUserWizardStep bir Iptal düğmesi içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 14: The CreateUserWizardStep Includes a Cancel Button (Click to view full-size image)

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.When a visitor enters a username, password, email address, and security question and answer and clicks "Create User," a new user account is created and the visitor is logged in as that newly created user. 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.Assuming that the person visiting the page is creating a new account for themselves, this is likely the desired behavior. Ancak, yöneticilerin yeni kullanıcı hesapları eklemesine izin vermek isteyebilirsiniz.However, you may want to allow Administrators to add new user accounts. 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.In doing so, the user account would be created, but the Administrator would remain logged in as an Administrator (and not as the newly created account). Bu davranış, Boole LoginCreatedUser özelliğiaracılığıyla değiştirilebilir.This behavior can be modified through the Boolean LoginCreatedUser property.

Üyelik çerçevesindeki Kullanıcı hesapları onaylanan bayrak içeriyor; onaylanmamış kullanıcılar sitede oturum açamıyor.User accounts in the Membership framework contain an approved flag; users who are not approved are unable to log into the site. 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.By default, a newly created account is marked as approved, allowing the user to log into the site immediately. Ancak, Yeni Kullanıcı hesaplarının onaylanmamış olarak işaretlenme olasılığı vardır.It is possible, however, to have new user accounts marked as unapproved. 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.Perhaps you want an Administrator to manually approve new users before they can log in; or maybe you want to verify that the email address entered at signup is valid before permitting a user to log on. 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).Whatever the case may be, you can have the newly created user account marked as unapproved by setting the CreateUserWizard control's DisableCreatedUser property to True (the default is False).

Nottaki diğer davranışla ilgili özellikler AutoGeneratePassword ve MailDefinitioniçerir.Other behavior-related properties of note include AutoGeneratePassword and 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ın GeneratePassword yöntemikullanılarak otomatik olarak oluşturulur.If the AutoGeneratePassword property is set to True, the CreateUserWizardStep does not display the "Password" and "Confirm Password" textboxes; instead, the newly-created user's password is automatically generated using the Membership class's GeneratePassword method. GeneratePassword yöntemi, yapılandırılan parola gücü gereksinimlerini karşılamak için, belirtilen uzunlukta ve yeterince alfasayısal olmayan karakter uzunluğunda bir parola oluşturur.The GeneratePassword method constructs a password of a specified length and with a sufficient number of non-alphanumeric characters to satisfy the configured password strength requirements.

MailDefinition özelliği , hesap oluşturma işlemi sırasında belirtilen e-posta adresine bir e-posta göndermek istiyorsanız yararlıdır.The MailDefinition property is useful if you want to send an email to the email address specified during the account creation process. MailDefinition özelliği, oluşturulan e-posta iletisiyle ilgili bilgileri tanımlamaya yönelik bir dizi alt özellikler içerir.The MailDefinition property includes a series of subproperties for defining information about the constructed email message. Bu alt özellikler Subject, Priority, IsBodyHtml, From, CCve BodyFileNamegibi seçenekleri içerir.These subproperties include options like Subject, Priority, IsBodyHtml, From, CC, and BodyFileName. BodyFileName özelliği , e-posta iletisinin gövdesini içeren bir metın veya HTML dosyasına işaret eder.The BodyFileName property points to a text or HTML file that contains the body for the email message. Gövde önceden tanımlanmış iki yer tutucuyu destekler: <%UserName%> ve <%Password%>.The body supports two pre-defined placeholders: <%UserName%> and <%Password%>. BodyFileName dosyasında varsa, bu yer tutucular, yalnızca yeni oluşturulan kullanıcının adı ve parolasıyla birlikte değişir.These placeholders, if present in the BodyFileName file, will be replaced with the just-created user's name and password.

Note

CreateUserWizard denetiminin MailDefinition özelliği yalnızca yeni bir hesap oluşturulduğunda gönderilen e-posta iletisiyle ilgili ayrıntıları belirtir.The CreateUserWizard control's MailDefinition property just specifies details about the email message that is sent when a new account is created. 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.).It does not include any details on how the email message is actually sent (that is, whether an SMTP server or mail drop directory is used, any authentication information, and so on). Bu alt düzey ayrıntıların Web.config``<system.net> bölümünde tanımlanması gerekir.These low-level details need to be defined in the <system.net> section in 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.For more information on these configuration settings and on sending email from ASP.NET 2.0 in general, refer to the FAQs at SystemNetMail.com and my article, Sending Email in ASP.NET 2.0.

Olay Işleyicilerini kullanarak CreateUserWizard davranışını genişletmeExtending the CreateUserWizard's Behavior Using Event Handlers

CreateUserWizard denetimi, iş akışı sırasında birkaç olay oluşturur.The CreateUserWizard control raises a number of events during its workflow. Ö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ıbaşlatır.For example, after a visitor enters their username, password, and other pertinent information and clicks the "Create User" button, the CreateUserWizard control raises its CreatingUser event. Oluşturma işlemi sırasında bir sorun varsa CreateUserError olayı tetiklenir; Ancak, Kullanıcı başarıyla oluşturulduysa CreatedUser olayı tetiklenir.If there is a problem during the create process, the CreateUserError event is fired; however, if the user is successfully created, then the CreatedUser event is raised. Ortaya çıkan ek CreateUserWizard denetim olayları vardır, ancak bunlar en fazla üç gere.There are additional CreateUserWizard control events that get raised, but these are the three most germane ones.

Belirli senaryolarda, uygun olay için bir olay işleyicisi oluşturarak yapabilmemiz CreateUserWizard iş akışına dokunmak istiyoruz.In certain scenarios we may want to tap into the CreateUserWizard workflow, which we can do by creating an event handler for the appropriate event. Bunu göstermek için, Kullanıcı adı ve parola üzerinde bazı özel doğrulama eklemek üzere RegisterUser CreateUserWizard denetimini geliştirelim.To illustrate this, let's enhance the RegisterUser CreateUserWizard control to include some custom validation on the username and password. Ö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.In particular, let's enhance our CreateUserWizard so that usernames cannot contain leading or trailing spaces and the username cannot appear anywhere in the password. 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.In short, we want to prevent someone from creating a username like "Scott ", or having a username/password combination like "Scott" and "Scott.1234".

Bunu gerçekleştirmek için, ek doğrulama denetimlerini gerçekleştirmek üzere CreatingUser olayı için bir olay işleyicisi oluşturacağız.To accomplish this we will create an event handler for the CreatingUser event to perform our extra validation checks. Sağlanan veriler geçerli değilse, oluşturma işlemini iptal etmeniz gerekir.If the supplied data is not valid we need to cancel the creation process. 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.We also need to add a Label Web control to the page to display a message explaining that the username or password is invalid. CreateUserWizard denetiminin altına bir etiket denetimi ekleyerek başlayın, ID özelliğini InvalidUserNameOrPasswordMessage ve ForeColor özelliğini Redolarak ayarlar.Start by adding a Label control beneath the CreateUserWizard control, setting its ID property to InvalidUserNameOrPasswordMessage and its ForeColor property to Red. Text özelliğini temizleyin ve EnableViewState ve Visible özelliklerini false olarak ayarlayın.Clear out its Text property and set its EnableViewState and Visible properties to False.

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

</asp:Label>

Sonra, CreateUserWizard denetiminin CreatingUser olayı için bir olay işleyicisi oluşturun.Next, create an event handler for the CreateUserWizard control's CreatingUser event. Bir olay işleyicisi oluşturmak için, tasarımcıda denetimi seçin ve ardından Özellikler penceresi gidin.To create an event handler, select the control in the Designer and then go to the Properties window. Buradan, şimşek simgesi simgesine tıklayın ve ardından olay işleyicisini oluşturmak için uygun olaya çift tıklayın.From there, click on the lightning bolt icon and then double-click the appropriate event to create the event handler.

CreatingUser olay işleyicisine aşağıdaki kodu ekleyin:Add the following code to the CreatingUser event handler:

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 sırasıyla UserName ve Password özellikleriaracılığıyla kullanılabildiğini unutmayın.Note that the username and password entered into the CreateUserWizard control are available through its UserName and Password properties, respectively. 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.We use these properties in the above event handler to determine whether the supplied username contains leading or trailing spaces and whether the username is found within the password. Bu koşullardan biri karşılanıyorsa, InvalidUserNameOrPasswordMessage etiketinde bir hata iletisi görüntülenir ve olay işleyicisinin e.Cancel özelliği trueolarak ayarlanır.If either of these conditions is met, an error message is displayed in the InvalidUserNameOrPasswordMessage Label and the event handler's e.Cancel property is set to true. e.Cancel trueolarak ayarlanırsa, CreateUserWizard kısa süreli iş akışını, Kullanıcı hesabı oluşturma işlemini etkin bir şekilde iptal etmek için devre dışı.If e.Cancel is set to true, the CreateUserWizard short-circuits its workflow, effectively cancelling the user account creation process.

Şekil 15, Kullanıcı başında boşluk olan bir Kullanıcı adı girdiğinde CreatingUserAccounts.aspx ekran görüntüsünü gösterir.Figure 15 shows a screen shot of CreatingUserAccounts.aspx when the user enters a username with leading spaces.

Baştaki veya sondaki boşluklarla kullanıcı adlarıyla Izin verilmezUsernames with Leading or Trailing Spaces are not Permitted

Ş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)Figure 15: Usernames with Leading or Trailing Spaces are not Permitted (Click to view full-size image)

Note

Ek kullanıcı bilgilerini depolama öğreticisinde CreateUserWizard denetiminin CreatedUser olayını kullanma örneği görüyoruz.We will see an example of using the CreateUserWizard control's CreatedUser event in the Storing Additional User Information tutorial.

ÖzetSummary

Membership sınıfının CreateUser yöntemi, üyelik çerçevesinde yeni bir kullanıcı hesabı oluşturur.The Membership class's CreateUser method creates a new user account in the Membership framework. Bu, yapılandırılan üyelik sağlayıcısına yapılan çağrının yetkisini alarak bunu yapar.It does so by delegating the call to the configured Membership provider. SqlMembershipProviderdurumda, CreateUser yöntemi aspnet_Users ve aspnet_Membership veritabanı tablolarına bir kayıt ekler.In the case of the SqlMembershipProvider, the CreateUser method adds a record to the aspnet_Users and aspnet_Membership database tables.

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.While new user accounts can be created programmatically (as we saw in Step 5), a faster and easier approach is to use the CreateUserWizard control. 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.This control renders a multi-step user interface for collecting user information and creating a new user in the Membership framework. Bu denetim, kapsamalar altında, 5. adımda incelendiğiyle aynı Membership.CreateUser yöntemini 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.Underneath the covers, this control uses the same Membership.CreateUser method as examined in Step 5, but the control creates the user interface, validation controls, and responds to user account creation errors without having to write a lick of code.

Bu noktada, Yeni Kullanıcı hesapları oluşturmak için işlevselliğe sahip olacak.At this point we have the functionality in place to create new user accounts. Ancak, oturum açma sayfası yine de ikinci öğreticide geri belirttiğimiz sabit kodlu kimlik bilgileri için doğrulanıyor.However, the login page still is validating against those hard-coded credentials we specified back in the second tutorial. Sonraki öğreticide , kullanıcının sağlanan kimlik bilgilerini üyelik çerçevesine göre doğrulamak için Login.aspx güncelleştireceğiz.In the next tutorial we will update Login.aspx to validate the user's supplied credentials against the Membership framework.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources:

Yazar hakkındaAbout the Author

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 Mitchell, author of multiple ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitim ister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Scott 'a mitchell@4guysfromrolla.com veya blogundan http://ScottOnWriting.NETüzerinden erişilebilir.Scott can be reached at mitchell@4guysfromrolla.com or via his blog at http://ScottOnWriting.NET.

Özel olarak teşekkürler...Special Thanks To…

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğretici için müşteri adayı gözden geçireni bir Murphy idi.Lead reviewer for this tutorial was Teresa Murphy. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, beni mitchell@4GuysFromRolla.combir satır bırakın.If so, drop me a line at mitchell@4GuysFromRolla.com.