Tworzenie kont użytkowników (C#)

przez Scott Mitchell

Pobierz kod lub Pobierz plik PDF

W tym samouczku opisano użycie platformy członkostwa (za pośrednictwem SqlMembershipProvider) w celu utworzenia nowych kont użytkowników. Zobaczymy, jak tworzyć nowych użytkowników programowo i za pomocą środowiska ASP. Wbudowana kontrolka formancie CreateUserWizard netto.

Wprowadzenie

W poprzednim samouczku zainstalowano schemat usług aplikacji w bazie danych, która dodała tabele, widoki i procedury składowane, które są odpowiednie dla SqlMembershipProvider i SqlRoleProvider . Ta infrastruktura została utworzona w przypadku pozostałej części samouczków w tej serii. W tym samouczku opisano korzystanie z platformy członkostwa (za pośrednictwem programu SqlMembershipProvider ) w celu tworzenia nowych kont użytkowników. Zobaczymy, jak tworzyć nowych użytkowników programowo i za pomocą środowiska ASP. Wbudowana kontrolka formancie CreateUserWizard netto.

Oprócz uczenia się, jak tworzyć nowe konta użytkowników, należy również zaktualizować witrynę internetową demonstracyjną, która została najpierw utworzona w omówieniu samouczka dotyczącego uwierzytelniania formularzy , a następnie udoskonaloną w samouczku konfiguracja uwierzytelniania formularzy i Tematy zaawansowane . Nasza demonstracyjna aplikacja sieci Web zawiera stronę logowania, która sprawdza poświadczenia użytkowników pod kątem zakodowanych par nazw użytkownika/hasła. Ponadto program Global.asax zawiera kod, który tworzy niestandardowe IPrincipal i IIdentity obiekty dla uwierzytelnionych użytkowników. Zaktualizujemy stronę logowania, aby sprawdzić poprawność poświadczeń użytkowników względem struktury członkostwa, a następnie usunąć niestandardowy podmiot zabezpieczeń i logikę tożsamości.

Zaczynamy!

Lista kontrolna uwierzytelniania i członkostwa formularzy

Przed rozpoczęciem pracy z platformą członkostwa Poświęć chwilę na zapoznanie się z ważnymi krokami, które zostały podjęte w celu osiągnięcia tego punktu. W przypadku korzystania z platformy członkostwa SqlMembershipProvider w ramach scenariusza uwierzytelniania opartego na formularzach należy wykonać następujące czynności przed zaimplementowaniem funkcji członkostwa w aplikacji sieci Web:

  1. Włączanie uwierzytelniania opartego na formularzach. Zgodnie z opisem w temacie Omówienie uwierzytelniania formularzy uwierzytelnianie formularzy jest włączane przez edytowanie Web.config i Ustawianie <authentication> mode atrybutu elementu na Forms . Przy włączonej uwierzytelnianiu formularzy każde żądanie przychodzące jest analizowane pod kątem biletu uwierzytelniania formularzy, który, jeśli jest obecny, identyfikuje żądającego.
  2. Dodaj schemat usług aplikacji do odpowiedniej bazy danych. W przypadku korzystania z programu SqlMembershipProvider musimy zainstalować schemat usług aplikacji w bazie danych programu. Zazwyczaj ten schemat jest dodawany do tej samej bazy danych, która zawiera model danych aplikacji. Schemat tworzenia schematu członkostwa w SQL Server samouczku oglądanym przy użyciu aspnet_regsql.exe Narzędzia do osiągnięcia tego celu.
  3. Dostosuj ustawienia aplikacji sieci Web, aby odwoływać się do bazy danych z kroku 2. Tworzenie schematu członkostwa w SQL Server samouczku przedstawiono dwa sposoby konfigurowania aplikacji sieci Web tak, aby SqlMembershipProvider używała bazy danych wybranej w kroku 2: modyfikując LocalSqlServer nazwę ciągu połączenia lub dodając nowego zarejestrowanego dostawcę do listy dostawców struktury członkostwa i dostosowując go do korzystania z bazy danych z kroku 2.

Podczas kompilowania aplikacji sieci Web, która korzysta z SqlMembershipProvider uwierzytelniania opartego na formularzach, należy wykonać te trzy czynności przed użyciem Membership klasy lub kontrolek sieci Web ASP.NET login. Ponieważ zostały już wykonane te kroki w poprzednich samouczkach, jesteśmy gotowi do rozpoczęcia korzystania z platformy członkostwa!

Krok 1. Dodawanie nowych stron ASP.NET

W tym samouczku i następnych trzech będziemy przeanalizować różne funkcje i możliwości związane z członkostwem. Potrzebujemy serii stron ASP.NET, aby zaimplementować tematy zbadane w ramach tych samouczków. Utwórzmy te strony, a następnie plik mapy witryny (Web.sitemap) .

Zacznij od utworzenia nowego folderu w projekcie o nazwie Membership . Następnie Dodaj pięć nowych stron ASP.NET do Membership folderu, łącząc każdą stronę ze Site.master stroną wzorcową. Nazwij strony:

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

W tym momencie Eksplorator rozwiązań projektu powinien wyglądać podobnie do zrzutu ekranu pokazanego na rysunku 1.

Dodano pięć nowych stron do folderu Membership

Rysunek 1. do folderu dodano pięć nowych stron Membership (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Każda Strona powinna, w tym momencie, mieć dwie kontrolki zawartości, jedną dla każdej strony głównej: MainContent i LoginContent .

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

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

Odwołaj, że LoginContent domyślne znaczniki elementu ContentPlaceHolder wyświetlają link do logowania lub wylogowywania lokacji w zależności od tego, czy użytkownik jest uwierzytelniony. Content2Jednak obecność kontrolki zawartości zastępuje domyślną adiustację strony wzorcowej. Zgodnie z opisem w temacie Omówienie samouczka dotyczącego uwierzytelniania formularzy jest to przydatne na stronach, w których nie chcesz wyświetlać opcji związanych z logowaniem w lewej kolumnie.

Jednak w przypadku tych pięciu stron chcemy wyświetlić domyślne znaczniki strony głównej dla elementu LoginContent ContentPlaceHolder. W związku z tym usuń znaczniki deklaratywne dla Content2 kontrolki zawartości. Po wykonaniu tej czynności każdy znacznik pięciu stron powinien zawierać tylko jedną kontrolkę zawartości.

Krok 2. Tworzenie mapy witryny

Wszystkie, ale najbardziej proste witryny sieci Web, muszą implementować niektóre formy interfejsu użytkownika nawigacyjnego. Interfejs użytkownika nawigacji może być prostą listą linków do różnych sekcji witryny. Alternatywnie te linki można rozmieścić w menu lub widokach drzewa. Jako deweloperzy stron, Tworzenie interfejsu użytkownika nawigacyjnego jest tylko połowami historii. Potrzebujemy również niektórych środków do zdefiniowania struktury logicznej lokacji w sposób umożliwiający ich konserwację i aktualizację. Po dodaniu nowych stron lub usunięciu istniejących stron chcemy mieć możliwość zaktualizowania jednego źródła — mapy witryny i modyfikacji tych zmian w interfejsie użytkownika nawigacji między lokacjami.

Te dwa zadania — Definiowanie mapy witryny i implementowanie interfejsu użytkownika nawigacyjnego opartego na mapie witryny — są łatwe w użyciu dla struktury mapy witryny i kontrolek sieci Web nawigacji dodanych w programie ASP.NET w wersji 2,0. Platforma mapy witryny pozwala deweloperowi definiować mapę witryny, a następnie uzyskiwać do niej dostęp za pomocą interfejsu API programu programistycznego ( SiteMap klasy). Wbudowane kontrolki sieci Web nawigacji obejmują kontrolkę menu, formant TreeViewi formant ścieżki mapy witryny.

Podobnie jak w przypadku struktur członkostwa i ról, struktura mapy witryny jest skompilowana korzystającego model dostawcy. Zadaniem klasy dostawcy mapy lokacji jest generowanie struktury w pamięci używanej przez SiteMap klasę z trwałego magazynu danych, takiego jak plik XML lub tabela bazy danych. .NET Framework jest dostarczany z domyślnym dostawcą mapy witryny, który odczytuje dane mapy witryny z pliku XML ( XmlSiteMapProvider ), i jest to dostawca, który będzie używany w tym samouczku. W przypadku niektórych alternatywnych implementacji dostawcy mapy witryny zapoznaj się z sekcją dalsze odczyty na końcu tego samouczka.

Domyślny dostawca mapy witryny oczekuje poprawnie sformatowanego pliku XML o nazwie Web.sitemap , aby istniał katalog główny. Ponieważ korzystamy z tego domyślnego dostawcy, musimy dodać taki plik i zdefiniować strukturę mapy witryny w odpowiednim formacie XML. Aby dodać plik, kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań i wybierz polecenie Dodaj nowy element. W oknie dialogowym Dodaj plik typu mapa witryny o nazwie Web.sitemap .

Dodaj plik o nazwie Web. sitemap do katalogu głównego projektu

Rysunek 2. Dodawanie pliku o nazwie Web.sitemap do katalogu głównego projektu (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Plik mapy witryny XML definiuje strukturę witryny sieci Web jako hierarchię. Ta relacja hierarchiczna jest modelowana w pliku XML za pośrednictwem pochodzenie <siteMapNode> elementów. Web.sitemapMusi rozpoczynać się od <siteMap> węzła nadrzędnego, który ma dokładnie jeden <siteMapNode> element podrzędny. Ten element najwyższego poziomu <siteMapNode> reprezentuje katalog główny hierarchii i może mieć dowolną liczbę węzłów podrzędnych. Każdy <siteMapNode> element musi zawierać title atrybut i może opcjonalnie dołączać url i zawierać description atrybuty, między innymi; każdy niepusty url atrybut musi być unikatowy.

Wprowadź następujący kod XML do Web.sitemap pliku:

<?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>

Powyższy znacznik mapy witryny definiuje hierarchię pokazaną na rysunku 3.

Mapa witryny reprezentuje hierarchiczną strukturę nawigacyjną

Rysunek 3. Mapa witryny reprezentuje hierarchiczną strukturę nawigacyjną (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Krok 3. aktualizowanie strony głównej w celu uwzględnienia interfejsu użytkownika nawigacyjnego

ASP.NET zawiera szereg formantów sieci Web związanych z nawigacją w celu projektowania interfejsu użytkownika. Obejmują one menu, TreeView i kontrolki ścieżki mapy witryny. Kontrolki menu i TreeView renderują strukturę mapy witryny odpowiednio do menu lub drzewa, natomiast ścieżki mapy witryny wyświetla pasek nawigacyjny, który pokazuje odwiedzany węzeł, a także jego elementy nadrzędne. Dane mapy lokacji można powiązać z innymi kontrolkami sieci Web danych przy użyciu SiteMapDataSource i mogą być dostępne programowo za pośrednictwem SiteMap klasy.

Ponieważ szczegółowe omówienie struktury mapy witryny i kontrolek nawigacji wykracza poza zakres tej serii samouczków, a nie poświęcają czasu na korzystanie z własnego interfejsu użytkownika nawigacyjnego, zamiast tego należy zażyczyć ten, który jest używany w pracy z danymi w serii samouczków ASP.NET 2,0, który używa kontrolki wzmacniak do wyświetlania listy punktowanej z podwójną listą linków nawigacji, jak pokazano na rysunku 4.

Aby utworzyć ten interfejs, Dodaj następujące znaczniki deklaracyjne do Site.master lewej kolumny strony wzorcowej, w której znajduje się tekst "do zrobienia: menu..." obecnie znajduje się.

<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" />

Powyższe oznaczenie wiąże formant wzmacniak o nazwie menu z SiteMapDataSource, który zwraca hierarchię mapy witryny zdefiniowaną w Web.sitemap . Ponieważ ShowStartingNode Właściwość kontrolki SiteMapDataSource jest ustawiona na wartość false, zaczyna zwracać hierarchię mapy witryny, rozpoczynając od elementów potomnych węzła "Home". Wzmacniak wyświetla każdy z tych węzłów (obecnie właśnie "członkostwo") w <li> elemencie. Innym, wzmacniak wewnętrzny wyświetla elementy podrzędne bieżącego węzła na zagnieżdżonej liście nieuporządkowanej.

Rysunek 4 przedstawia renderowane dane wyjściowe ze znacznikiem mapy witryny utworzoną w kroku 2. Wzmacniak renderuje znaczniki listy nieuporządkowane, reguły kaskadowego arkusza stylów zdefiniowane w programie Styles.css są odpowiedzialne za układ estetycznie-atrakcyjne. Aby uzyskać bardziej szczegółowy opis sposobu działania powyższych znaczników, zapoznaj się z samouczkiem strony wzorcowe i nawigacja w witrynie .

Interfejs użytkownika nawigacyjnego jest renderowany przy użyciu zagnieżdżonych list nieuporządkowanych

Ilustracja 4. interfejs użytkownika nawigacyjnego jest renderowany przy użyciu zagnieżdżonych list nieuporządkowanych (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Dodawanie nawigacji nawigacyjnej

Poza listą linków w lewej kolumnie, przyjrzyjmy się także stronom nawigacyjnym. Pasek nawigacyjny jest elementem interfejsu użytkownika nawigacji, który szybko pokazuje użytkowników ich bieżącej pozycji w hierarchii lokacji. Kontrolka ścieżki mapy witryny korzysta z struktury mapy witryny w celu określenia lokalizacji bieżącej strony w mapie witryny, a następnie wyświetlenie stron do odłączenia na podstawie tych informacji.

W <span> celu dodania elementu do elementu nagłówkowego strony wzorcowej <div> i ustawienia <span> atrybutu nowego elementu class na "Strona". ( Styles.css Klasa zawiera regułę dla klasy "śladów"). Następnie Dodaj ścieżki mapy witryny do tego nowego <span> elementu.

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

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

Rysunek 5 przedstawia dane wyjściowe ścieżki mapy witryny podczas odwiedzania ~/Membership/CreatingUserAccounts.aspx .

Pasek nawigacyjny wyświetla bieżącą stronę i jej elementy nadrzędne na mapie witryny

Rysunek 5. pasek nawigacyjny wyświetla bieżącą stronę i jej elementy nadrzędne na mapie witryny (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Krok 4. Usuwanie niestandardowego podmiotu zabezpieczeń i logiki tożsamości

Niestandardowe obiekty Principal i Identity mogą być skojarzone z uwierzytelnionym użytkownikiem. W tym celu należy utworzyć procedurę obsługi zdarzeń w programie Global.asax dla PostAuthenticateRequest zdarzenia aplikacji, która jest uruchamiana po FormsAuthenticationModule uwierzytelnieniu użytkownika. W tej procedurze obsługi zdarzeń zamieniono GenericPrincipal obiekty i FormsIdentity dodane przez siebie FormsAuthenticationModule z CustomPrincipal obiektami i, CustomIdentity które zostały utworzone w tym samouczku.

Chociaż niestandardowe obiekty Principal i Identity są przydatne w niektórych scenariuszach, w większości przypadków GenericPrincipal obiekty i FormsIdentity są wystarczające. W związku z tym uważam, że wartościowa powróci do zachowania domyślnego. Wprowadź tę zmianę, usuwając lub PostAuthenticateRequest dodając komentarz do programu obsługi zdarzeń lub usuwając Global.asax cały plik.

Krok 5. programowe tworzenie nowego użytkownika

Aby utworzyć nowe konto użytkownika za pomocą platformy członkostwa, użyj Membership CreateUser metodyklasy. Ta metoda zawiera parametry wejściowe dla nazwy użytkownika, hasła i innych pól związanych z użytkownikiem. W wywołaniu zostaje delegowane utworzenie nowego konta użytkownika do skonfigurowanego dostawcy członkostwa, a następnie zwraca MembershipUser obiekt reprezentujący właśnie utworzone konto użytkownika.

CreateUserMetoda ma cztery przeciążenia, a każdy z nich akceptuje inną liczbę parametrów wejściowych:

Te cztery przeciążenia różnią się od ilości zbieranych informacji. Pierwsze Przeciążenie, na przykład, wymaga tylko nazwy użytkownika i hasła dla nowego konta użytkownika, a drugi także wymaga adresu e-mail użytkownika.

Te przeciążenia istnieją, ponieważ informacje konieczne do utworzenia nowego konta użytkownika zależą od ustawień konfiguracji dostawcy członkostwa. W samouczku Tworzenie schematu członkostwa w programie SQL Server sprawdzono Określanie ustawień konfiguracji dostawcy członkostwa w programie Web.config . Tabela 2 zawiera pełną listę ustawień konfiguracji.

Ustawienie to może być jednym z tych ustawień konfiguracji dostawcy członkostwa, które mają wpływ na to, jakie CreateUser przeciążenia mogą być używane requiresQuestionAndAnswer . Jeśli requiresQuestionAndAnswer jest ustawiona na true (wartość domyślna), wówczas podczas tworzenia nowego konta użytkownika należy określić pytanie zabezpieczające i odpowiedź. Te informacje są później używane, jeśli użytkownik musi zresetować lub zmienić hasło. W tym czasie są wyświetlane pytania zabezpieczające i muszą one wprowadzić poprawną odpowiedź w celu zresetowania lub zmiany hasła. W związku z tym, jeśli requiresQuestionAndAnswer jest ustawiona na true wywołanie jednego z dwóch pierwszych CreateUser przeciążeń powoduje wyjątek, ponieważ brakuje pytania zabezpieczającego i odpowiedzi. Ponieważ nasza aplikacja jest obecnie skonfigurowana do wymagania zabezpieczeń i odpowiedzi, należy użyć jednego z dwóch ostatnich przeciążeń podczas programistycznego tworzenia użytkownika.

Aby zilustrować przy użyciu CreateUser metody, Utwórzmy interfejs użytkownika, w którym zostanie wyświetlony monit o podanie nazwy, hasła, wiadomości e-mail i odpowiedzi na wstępnie zdefiniowane pytanie zabezpieczające. Otwórz CreatingUserAccounts.aspx stronę w Membership folderze i Dodaj następujące kontrolki sieci Web do kontrolki zawartość:

  • Pole tekstowe o nazwie Username
  • Pole tekstowe o nazwie Password , którego TextMode Właściwość jest ustawiona na Password
  • Pole tekstowe o nazwie Email
  • Etykieta o nazwie SecurityQuestion z Text wyczyszczoną właściwością
  • Pole tekstowe o nazwie SecurityAnswer
  • Przycisk o nazwie CreateAccountButton właściwość Text ma wartość "Utwórz konto użytkownika".
  • Kontrolka etykiety o nazwie CreateAccountResults z Text właściwością wyczyszczoną

W tym momencie ekran powinien wyglądać podobnie do zrzutu ekranu pokazanego na rysunku 6.

Dodawanie różnych kontrolek sieci Web do strony CreatingUserAccounts. aspx

Ilustracja 6. Dodawanie różnych kontrolek sieci Web na CreatingUserAccounts.aspx stronie (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

SecurityQuestionEtykieta i SecurityAnswer pole tekstowe są przeznaczone do wyświetlania wstępnie zdefiniowanego pytania zabezpieczającego i zbierania odpowiedzi użytkownika. Należy zauważyć, że zarówno pytanie zabezpieczeń, jak i odpowiedź są przechowywane w zależności od użytkownika, więc można zezwolić każdemu użytkownikowi na Definiowanie własnych pytań zabezpieczających. Jednak na potrzeby tego przykładu postanowiono użyć uniwersalnego pytania zabezpieczającego, czyli: "jaki jest Twój ulubiony kolor?".

Aby zaimplementować to wstępnie zdefiniowane pytanie zabezpieczające, należy dodać stałą do klasy związanej z kodem powiązanej ze stroną o nazwie passwordQuestion , przypisując jej pytanie zabezpieczające. Następnie w programie Page_Load obsługi zdarzeń Przypisz tę stałą do SecurityQuestion Text właściwości etykiety:

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

Następnie Utwórz procedurę obsługi zdarzeń dla CreateAccountButton Click zdarzenia i Dodaj następujący kod:

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

ClickProcedura obsługi zdarzeń jest uruchamiana przez zdefiniowanie zmiennej o nazwie createStatus typu MembershipCreateStatus . MembershipCreateStatus jest wyliczeniem wskazującym stan CreateUser operacji. Na przykład jeśli konto użytkownika zostanie utworzone pomyślnie, MembershipCreateStatus wystąpienie wystąpienia zostanie ustawione na wartość Success ; z drugiej strony, jeśli operacja nie powiedzie się, ponieważ istnieje już użytkownik o tej samej nazwie użytkownika, zostanie ona ustawiona na wartość DuplicateUserName . W CreateUser używanym przeciążeniu musimy przekazać MembershipCreateStatus wystąpienie do metody jako out parametr. Ten parametr jest ustawiony na odpowiednią wartość w CreateUser metodzie i można sprawdzić jego wartość po wywołaniu metody, aby określić, czy konto użytkownika zostało pomyślnie utworzone.

Po wywołaniu CreateUser , przekazując createStatus , switch instrukcja jest używana do wyprowadzania odpowiedniego komunikatu w zależności od wartości przypisanej do createStatus . Ilustracje 7 przedstawiają dane wyjściowe w przypadku pomyślnego utworzenia nowego użytkownika. Rysunki 8 i 9 przedstawiają dane wyjściowe, jeśli konto użytkownika nie zostało utworzone. Na rysunku nr 8 osoba odwiedzająca wprowadziła hasło z pięcioma literami, które nie spełnia wymagań siły hasła wpisanych w ustawieniach konfiguracji dostawcy członkostwa. Na rysunku nr 9 osoba odwiedzająca próbuje utworzyć konto użytkownika przy użyciu istniejącej nazwy użytkownika (utworzonej na rysunku 7).

Nowe konto użytkownika zostało pomyślnie utworzone

Rysunek 7: pomyślnie utworzono nowe konto użytkownika (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Konto użytkownika nie zostało utworzone, ponieważ podane hasło jest zbyt słabe

Ilustracja 8. konto użytkownika nie zostało utworzone, ponieważ podane hasło jest zbyt słabe (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Konto użytkownika nie zostało utworzone, ponieważ nazwa użytkownika jest już używana

Rysunek 9: konto użytkownika nie zostało utworzone, ponieważ nazwa użytkownika jest już używana (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Note

Być może zastanawiasz się, jak określić powodzenie lub niepowodzenie w przypadku użycia jednego z dwóch pierwszych CreateUser przeciążeń metod, żadna z parametrów nie ma parametru typu MembershipCreateStatus . Te pierwsze dwa przeciążenia zgłaszają MembershipCreateUserException wyjątek w wyniku awarii, która zawiera StatusCode Właściwość typu MembershipCreateStatus .

Po utworzeniu kilku kont użytkowników Sprawdź, czy konta zostały utworzone przez wystawienie zawartości aspnet_Users aspnet_Membership tabel i w SecurityTutorials.mdf bazie danych. Jak pokazano na rysunku 10, dodaliśmy dwóch użytkowników za pośrednictwem CreatingUserAccounts.aspx strony: Tito i Bruce.

W magazynie użytkowników członkostwa znajdują się dwaj użytkownicy: Tito i Bruce

Rysunek 10. w magazynie użytkowników członkostwa są dwaj użytkownicy: Tito i Bruce (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Magazyn użytkowników członkostwa zawiera teraz informacje o kontach Bruce i Tito, ale zaimplementowano jeszcze funkcję umożliwiającą Bruce lub Tito logowanie się do lokacji. Obecnie program Login.aspx sprawdza poprawność poświadczeń użytkownika względem zakodowanego zestawu par nazw użytkownika/hasła — nie sprawdza poprawności podanych poświadczeń względem struktury członkostwa. W przypadku korzystania z nowych kont użytkowników w aspnet_Users tabelach i aspnet_Membership będą one wystarczające. W następnym samouczku Sprawdzanie poprawności poświadczeń użytkownika względem magazynu użytkowników członkostwa spowoduje zaktualizowanie strony logowania w celu weryfikacji względem magazynu członkostwa.

Note

Jeśli nie widzisz żadnych użytkowników w SecurityTutorials.mdf bazie danych, może to być spowodowane tym, że aplikacja sieci Web korzysta z domyślnego dostawcy członkostwa, AspNetSqlMembershipProvider który używa ASPNETDB.mdf bazy danych jako magazynu użytkownika. Aby określić, czy jest to problem, kliknij przycisk Odśwież w Eksplorator rozwiązań. Jeśli baza danych o nazwie ASPNETDB.mdf została dodana do App_Data folderu, jest to problem. Wróć do kroku 4 tworzenia schematu członkostwa w SQL Server samouczku, aby uzyskać instrukcje dotyczące prawidłowego konfigurowania dostawcy członkostwa.

W większości przypadków tworzenia scenariuszy kont użytkowników osoba odwiedzająca jest prezentowana z interfejsem, aby wprowadzić nazwę użytkownika, hasło, adres e-mail i inne istotne informacje. w tym momencie zostanie utworzone nowe konto. W tym kroku zawarto informacje na temat tworzenia takiego interfejsu, a następnie Zobacz, jak używać Membership.CreateUser metody do programistycznego dodawania nowego konta użytkownika na podstawie danych wejściowych użytkownika. Nasz kod, ale właśnie utworzył nowe konto użytkownika. Nie wykonano żadnych akcji uzupełniania, takich jak logowanie użytkownika do witryny w ramach właśnie utworzonego konta użytkownika lub wysyłanie potwierdzenia wiadomości e-mail do użytkownika. Te dodatkowe kroki wymagają dodatkowego kodu w programie Click obsługi zdarzeń przycisku.

ASP.NET jest dostarczany z kontrolką formancie CreateUserWizard, która jest przeznaczona do obsługi procesu tworzenia konta użytkownika, od renderowania interfejsu użytkownika w celu tworzenia nowych kont użytkowników, tworzenia konta w środowisku członkostwa i wykonywania zadań tworzenia konta, takich jak wysyłanie wiadomości e-mail z potwierdzeniem i rejestrowanie samego użytkownika utworzonego w witrynie. Użycie formantu formancie CreateUserWizard jest proste, ponieważ przeciągając kontrolkę formancie CreateUserWizard z przybornika na stronę, a następnie ustawiając kilka właściwości. W większości przypadków nie trzeba pisać jednego wiersza kodu. Ta kontrolka Nifty zostanie szczegółowo omówione w kroku 6.

Jeśli nowe konta użytkowników są tworzone tylko za pośrednictwem typowej strony sieci Web tworzenia konta, prawdopodobnie trzeba będzie napisać kod, który używa CreateUser metody, ponieważ formant formancie CreateUserWizard będzie prawdopodobnie spełniał Twoje potrzeby. Jednak CreateUser Metoda jest użyteczna w scenariuszach, w których potrzebne jest wysoce dostosowane środowisko użytkownika tworzenia konta lub kiedy trzeba programistycznie tworzyć nowe konta użytkowników za pomocą alternatywnego interfejsu. Na przykład może istnieć strona, która umożliwia użytkownikowi przekazywanie pliku XML, który zawiera informacje o użytkowniku z innej aplikacji. Strona może analizować zawartość przekazanego pliku XML i utworzyć nowe konto dla każdego użytkownika reprezentowanego w kodzie XML przez wywołanie CreateUser metody.

Krok 6. Tworzenie nowego użytkownika za pomocą kontrolki formancie CreateUserWizard

ASP.NET jest dostarczany z liczbą kontrolek sieci Web logowania. Te kontrolki mają na celu pomoc w wielu typowych scenariuszach dotyczących kont użytkowników i związanych z logowaniem. Formant formancie CreateUserWizard to jedna taka kontrolka, która została zaprojektowana w celu zaprezentowania interfejsu użytkownika w celu dodania nowego konta użytkownika do struktury członkostwa.

Podobnie jak w przypadku wielu innych kontrolek sieci Web związanych z logowaniem, formancie CreateUserWizard można używać bez konieczności pisania jednego wiersza kodu. Intuicyjnie udostępnia interfejs użytkownika na podstawie ustawień konfiguracyjnych dostawcy członkostwa i wewnętrznie wywołuje Membership CreateUser metodę klasy po wprowadzeniu niezbędnych informacji przez użytkownika i kliknięciu przycisku "Utwórz użytkownika". Kontrolka formancie CreateUserWizard jest niezwykle dostosowywalna. Istnieje Host zdarzeń, które są uruchamiane na różnych etapach procesu tworzenia konta. W razie potrzeby możemy utworzyć programy obsługi zdarzeń w celu dodania logiki niestandardowej do przepływu pracy tworzenia konta. Co więcej, wygląd formancie CreateUserWizard jest bardzo elastyczny. Istnieje wiele właściwości, które definiują wygląd interfejsu domyślnego; w razie potrzeby można dokonać konwersji kontrolki na szablon lub dodatkową rejestrację użytkownika.

Zacznijmy od przyjrzeć się domyślnym interfejsem i zachowaniem formantu formancie CreateUserWizard. Następnie będziemy dowiedzieć się, jak dostosować wygląd za pomocą właściwości i zdarzeń kontrolki.

Badanie domyślnego interfejsu i zachowań formancie CreateUserWizard

Wróć do CreatingUserAccounts.aspx strony w Membership folderze, przełącz się do trybu projektowania lub podziału, a następnie Dodaj kontrolkę formancie CreateUserWizard w górnej części strony. Kontrolka formancie CreateUserWizard jest zarejestrowana w sekcji kontrolki logowania przybornika. Po dodaniu kontrolki ustaw jej ID Właściwość na RegisterUser . Ponieważ zrzut ekranu na rysunku 11 pokazuje, formancie CreateUserWizard renderuje interfejs przy użyciu pól tekstowych dla nowego użytkownika, hasła, adresu e-mail i pytania zabezpieczającego.

Kontrolka formancie CreateUserWizard renderuje ogólny interfejs użytkownika tworzenia

Ilustracja 11. kontrolka formancie CreateUserWizard renderuje ogólny interfejs użytkownika tworzenia (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Poświęć chwilę na porównanie domyślnego interfejsu użytkownika wygenerowanego przez formant formancie CreateUserWizard z interfejsem, który został utworzony w kroku 5. W przypadku osób uruchamiających formant formancie CreateUserWizard umożliwia osobie odwiedzającej określenie pytania zabezpieczeń i odpowiedzi, natomiast nasz ręcznie utworzony interfejs użył wstępnie zdefiniowanego pytania zabezpieczającego. Interfejs formantu formancie CreateUserWizard również zawiera kontrolki walidacji, podczas gdy nie zaimplementowano jeszcze walidacji pól formularza interfejsu. Interfejs formancie CreateUserWizard Control zawiera pole tekstowe "Confirm Password" (wraz z CompareValidator, aby upewnić się, że tekst wprowadzony w polach tekstowych "Password" i "Compare Password" są równe).

Interesujący jest sposób, w jaki formant formancie CreateUserWizard sprawdza ustawienia konfiguracji dostawcy członkostwa podczas renderowania interfejsu użytkownika. Na przykład pola tekstowe pytania zabezpieczeń i odpowiedzi są wyświetlane tylko wtedy, gdy requiresQuestionAndAnswer jest ustawiona na wartość true. Podobnie formancie CreateUserWizard automatycznie dodaje kontrolkę RegularExpressionValidator, aby upewnić się, że są spełnione wymagania dotyczące siły hasła, i ustawia jej ErrorMessage ValidationExpression właściwości na minRequiredPasswordLength podstawie minRequiredNonalphanumericCharacters passwordStrengthRegularExpression ustawień konfiguracji, i.

Formant formancie CreateUserWizard, jak jego nazwa oznacza, pochodzi od kontrolki kreatora. Formanty kreatora zostały zaprojektowane w celu zapewnienia interfejsu do wykonywania zadań wieloetapowych. Kontrolka kreatora może mieć dowolną liczbę, z WizardSteps której każdy jest szablonem, który definiuje HTML i kontrolki sieci Web dla tego kroku. Kontrolka kreatora początkowo wyświetla pierwszy WizardStep , wraz z kontrolkami nawigacji, które umożliwiają użytkownikowi przechodzenie z jednego kroku do następnego lub powrót do poprzednich kroków.

Jak znaczniki deklaratywne na rysunku 11 pokazują, domyślnym interfejsem kontrolki formancie CreateUserWizard jest dwa WizardSteps:

  • CreateUserWizardStep — renderuje interfejs w celu zebrania informacji dotyczących tworzenia nowego konta użytkownika. Jest to krok przedstawiony na rysunku 11.
  • CompleteWizardStep — renderuje komunikat informujący o tym, że konto zostało pomyślnie utworzone.

Wygląd i zachowanie formancie CreateUserWizard można modyfikować, konwertując jeden z tych kroków na szablony lub dodając własny WizardSteps . Dowiesz się, jak dodać WizardStep do interfejsu rejestracji w samouczku przechowywanie dodatkowych informacji o użytkownikach .

Zobaczmy, jak działa kontrolka formancie CreateUserWizard. Odwiedź CreatingUserAccounts.aspx stronę za pomocą przeglądarki. Zacznij od wprowadzenia nieprawidłowych wartości do interfejsu formancie CreateUserWizard. Spróbuj wprowadzić hasło, które nie jest zgodne z wymaganiami dotyczącymi siły hasła lub pozostawić pole tekstowe "Nazwa użytkownika" puste. W formancie CreateUserWizard zostanie wyświetlony odpowiedni komunikat o błędzie. Rysunek 12 przedstawia dane wyjściowe podczas próby utworzenia użytkownika z niewystarczającym silnym hasłem.

Formancie CreateUserWizard automatycznie wprowadza kontrolki walidacji

Ilustracja 12. formancie CreateUserWizard automatycznie wprowadza kontrolki walidacji (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Następnie wprowadź odpowiednie wartości w formancie CreateUserWizard, a następnie kliknij przycisk "Utwórz użytkownika". Przy założeniu, że wymagane pola zostały wprowadzone, a siła hasła jest wystarczająca, formancie CreateUserWizard utworzy nowe konto użytkownika za pomocą struktury członkostwa, a następnie wyświetli CompleteWizardStep interfejs (patrz rysunek 13). W tle formancie CreateUserWizard wywołuje Membership.CreateUser metodę, podobnie jak w kroku 5.

Nowe konto użytkownika zostało pomyślnie utworzone

Rysunek 13: nowe konto użytkownika zostało pomyślnie utworzone (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Note

Jak pokazano na rysunku 13, CompleteWizardStep interfejs zawiera przycisk Kontynuuj. Jednak po kliknięciu tej opcji po prostu wykonuje ogłaszanie zwrotne, pozostawiając odwiedzanie na tej samej stronie. W sekcji "Dostosowywanie wyglądu i zachowania formancie CreateUserWizard za pomocą jego właściwości" powiesz się, jak możesz mieć ten przycisk Wyślij odwiedzającego do Default.aspx (lub innej strony).

Po utworzeniu nowego konta użytkownika Wróć do programu Visual Studio i zbadaj tabele i podobne do pokazanej aspnet_Users aspnet_Membership na rysunku nr 10, aby sprawdzić, czy konto zostało pomyślnie utworzone.

Dostosowywanie zachowania i wyglądu formancie CreateUserWizard za pomocą jego właściwości

Formancie CreateUserWizard można dostosować na wiele sposobów, za pomocą właściwości, WizardSteps i obsługi zdarzeń. W tej sekcji zawarto informacje na temat sposobu dostosowywania wyglądu kontrolki za pomocą jej właściwości. Następna sekcja sprawdza, rozszerzając zachowanie kontrolki za pomocą programów obsługi zdarzeń.

Praktycznie cały tekst wyświetlany w domyślnym interfejsie użytkownika formantu formancie CreateUserWizard można dostosować za pomocą jego mnóstwo właściwości. Na przykład etykiety "Nazwa użytkownika", "hasło", "Potwierdź hasło", "adres E-mail", "pytanie zabezpieczające" i "odpowiedź zabezpieczeń" wyświetlane po lewej stronie pól tekstowych można odpowiednio dostosować o UserNameLabelText właściwości,,,, PasswordLabelText ConfirmPasswordLabelText EmailLabelText QuestionLabelText i AnswerLabelText . Podobnie są właściwości do określania tekstu dla przycisków "Utwórz użytkownika" i "Kontynuuj" w CreateUserWizardStep i CompleteWizardStep , a także jeśli te przyciski są renderowane jako przyciski, LinkButtons lub ImageButtons.

Kolory, obramowania, czcionki i inne elementy wizualne można konfigurować za pomocą hosta właściwości stylu. Sam formant formancie CreateUserWizard ma wspólną Właściwość stylu kontrolki sieci Web — BackColor , BorderStyle , CssClass , Font i tak dalej — i istnieje wiele właściwości stylu do definiowania wyglądu określonych sekcji interfejsu formancie CreateUserWizard. TextBoxStyle Właściwość, na przykład, definiuje style dla pól tekstowych w CreateUserWizardStep , podczas gdy TitleTextStyle Właściwość definiuje styl tytułu ("Utwórz nowe konto").

Oprócz właściwości związanych z wyglądem istnieje wiele właściwości, które wpływają na zachowanie formantu formancie CreateUserWizard. DisplayCancelButton Właściwość, jeśli ma wartość true, wyświetla przycisk Anuluj obok przycisku "Utwórz użytkownika" (wartość domyślna to false). Jeśli zostanie wyświetlony przycisk Anuluj, należy również ustawić CancelDestinationPageUrl Właściwość, która określa stronę, do której użytkownik jest wysyłany po kliknięciu przycisku Anuluj. Jak wskazano w poprzedniej sekcji, przycisk Kontynuuj w CompleteWizardStep interfejsie powoduje wystąpienie zwrotne, ale pozostawia odwiedzającego na tej samej stronie. Aby wysłać odwiedzających do innej strony po kliknięciu przycisku Kontynuuj, wystarczy określić adres URL we ContinueDestinationPageUrl Właściwości.

Zaktualizujmy RegisterUser kontrolkę formancie CreateUserWizard, aby wyświetlić przycisk Anuluj i wysłać odwiedzającego do Default.aspx momentu kliknięcia przycisków Anuluj lub Kontynuuj. Aby to osiągnąć, należy ustawić DisplayCancelButton Właściwość na true i obie CancelDestinationPageUrl właściwości i ContinueDestinationPageUrl na wartość "~/default.aspx". Ilustracja 14 przedstawia zaktualizowany formancie CreateUserWizard, gdy jest wyświetlany za pomocą przeglądarki.

Element CreateUserWizardStep zawiera przycisk Anuluj

Ilustracja 14. CreateUserWizardStep przycisk z uwzględnieniem anulowania (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Gdy osoba odwiedzająca wprowadzi nazwę użytkownika, hasło, adres e-mail i pytanie zabezpieczające i odpowiedź, a następnie kliknie przycisk "Utwórz użytkownika", zostanie utworzone nowe konto użytkownika, a osoba odwiedzająca zostanie zalogowana jako nowo utworzony użytkownik. Przy założeniu, że osoba odwiedzająca stronę tworzy nowe konto dla siebie, prawdopodobnie jest to żądane zachowanie. Można jednak zezwolić administratorom na dodawanie nowych kont użytkowników. W takim przypadku konto użytkownika zostanie utworzone, ale administrator pozostanie zalogowany jako administrator (a nie jako nowo utworzone konto). To zachowanie można zmodyfikować za pomocą LoginCreatedUser WłaściwościBoolean.

Konta użytkowników w środowisku członkostwa zawierają zatwierdzoną flagę; Użytkownicy, którzy nie są zatwierdzeni, nie mogą zalogować się do witryny. Domyślnie nowo utworzone konto jest oznaczone jako zatwierdzone, co umożliwia użytkownikowi natychmiastowe logowanie do witryny. Istnieje jednak możliwość, że nowe konta użytkowników są oznaczone jako niezatwierdzone. Być może Administrator ma ręcznie zatwierdzać nowych użytkowników przed ich zalogowaniem się; Możesz też sprawdzić, czy adres e-mail wprowadzony podczas rejestracji jest prawidłowy przed zezwoleniem użytkownikowi na zalogowanie się. Niezależnie od tego, czy nowo utworzone konto użytkownika można oznaczyć jako niezatwierdzone przez ustawienie DisableCreatedUser Właściwości kontrolki formancie CreateUserWizard na true (wartość domyślna to false).

Inne właściwości powiązane z zachowaniem uwagi obejmują AutoGeneratePassword i MailDefinition . Jeśli AutoGeneratePassword Właściwość jest ustawiona na wartość true, nie są CreateUserWizardStep wyświetlane pola tekstowe "Password" i "Confirm Password". zamiast tego nowo utworzone hasło użytkownika jest generowane automatycznie przy użyciu Membership GeneratePassword metodyklasy. GeneratePasswordMetoda tworzy hasło o określonej długości i o wystarczającej liczbie znaków innych niż alfanumeryczne w celu spełnienia skonfigurowanych wymagań dotyczących siły hasła.

MailDefinition Właściwość jest przydatna, jeśli chcesz wysłać wiadomość e-mail na adres e-mail określony podczas procesu tworzenia konta. MailDefinitionWłaściwość zawiera serię podwłaściwości definiujących informacje o konstruowanej wiadomości e-mail. Właściwości te obejmują opcje takie jak,,,, Subject Priority IsBodyHtml From CC , i BodyFileName . BodyFileName Właściwość wskazuje plik tekstowy lub HTML, który zawiera treść wiadomości e-mail. Treść obsługuje dwa wstępnie zdefiniowane symbole zastępcze: <%UserName%> i <%Password%> . Te symbole zastępcze, jeśli znajdują się w BodyFileName pliku, zostaną zastąpione nazwą i hasłem utworzonego przez samego użytkownika.

Note

CreateUserWizardWłaściwość kontrolki MailDefinition po prostu określa szczegóły dotyczące wiadomości e-mail wysyłanej po utworzeniu nowego konta. Nie zawiera żadnych szczegółowych informacji o tym, w jaki sposób wiadomość e-mail jest wysyłana (czyli czy jest używany serwer SMTP lub katalog poczty drop mail, wszystkie informacje o uwierzytelnianiu itd.). Te szczegóły niskiego poziomu należy zdefiniować w <system.net> sekcji w temacie Web.config . Aby uzyskać więcej informacji na temat tych ustawień konfiguracji oraz wysyłania wiadomości e-mail z usługi ASP.NET 2,0 ogólniej, zobacz często zadawane pytania dotyczące SystemNetMail.com i mojego artykułu, wysyłając wiadomość e-mail w ASP.NET 2,0.

Rozszerzanie zachowania formancie CreateUserWizard przy użyciu procedur obsługi zdarzeń

Kontrolka formancie CreateUserWizard wywołuje wiele zdarzeń podczas przepływu pracy. Na przykład po wprowadzeniu przez osobę odwiedzającą nazwy użytkownika, hasła i innych istotnych informacji i kliknięciu przycisku "Utwórz użytkownika" formant formancie CreateUserWizard wywołuje jego CreatingUser zdarzenie. Jeśli wystąpi problem podczas tworzenia, CreateUserError zdarzenie jest wyzwalane, jednak jeśli użytkownik został pomyślnie utworzony, CreatedUser zdarzenie zostanie zgłoszone. Istnieją dodatkowe zdarzenia kontroli formancie CreateUserWizard, które są wywoływane, ale są to trzy najbardziej niemieckie.

W niektórych scenariuszach możemy chcieć nacisnąć przepływ pracy formancie CreateUserWizard, co możemy zrobić, tworząc procedurę obsługi zdarzeń dla odpowiedniego zdarzenia. Aby to zilustrować, Zwiększmy RegisterUser kontrolę formancie CreateUserWizard, aby uwzględnić niestandardowe sprawdzanie poprawności nazwy użytkownika i hasła. W szczególności ulepszamy nasze formancie CreateUserWizard, dzięki czemu nazwy użytkowników nie mogą zawierać spacji wiodących ani końcowych, a nazwa użytkownika nie może pojawić się w dowolnym miejscu hasła. W skrócie chcemy uniemożliwić komuś utworzenie nazwy użytkownika, takiej jak "Scott", lub posiadania kombinacji nazwy użytkownika i hasła, takich jak "Scott" i "Scott. 1234".

Aby to osiągnąć, utworzymy procedurę obsługi zdarzeń dla CreatingUser zdarzenia w celu wykonania naszych dodatkowych sprawdzeń weryfikacyjnych. Jeśli podane dane nie są prawidłowe, należy anulować proces tworzenia. Należy również dodać kontrolkę sieci Web etykieta do strony, aby wyświetlić komunikat z wyjaśnieniem, że nazwa użytkownika lub hasło jest nieprawidłowe. Zacznij od dodania kontrolki etykieta pod kontrolką formancie CreateUserWizard, ustawiając jej ID Właściwość na InvalidUserNameOrPasswordMessage i jej ForeColor Właściwość na Red . Wyczyść Text Właściwość i ustaw EnableViewState dla jej właściwości i Visible wartość false.

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

</asp:Label>

Następnie Utwórz procedurę obsługi zdarzeń dla zdarzenia kontrolki formancie CreateUserWizard CreatingUser . Aby utworzyć procedurę obsługi zdarzeń, zaznacz kontrolkę w projektancie, a następnie przejdź do okno Właściwości. W tym miejscu kliknij ikonę błyskawicy, a następnie kliknij dwukrotnie odpowiednie zdarzenie, aby utworzyć procedurę obsługi zdarzeń.

Dodaj następujący kod do CreatingUser programu obsługi zdarzeń:

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

Należy pamiętać, że nazwa użytkownika i hasło wprowadzone w kontrolce formancie CreateUserWizard są dostępne UserName odpowiednio w jego Password właściwościachi. Te właściwości są używane w powyższej procedurze obsługi zdarzeń, aby określić, czy podana nazwa użytkownika zawiera spacje wiodące, czy końcowe oraz czy nazwa użytkownika znajduje się w haśle. Jeśli spełniony jest dowolny z tych warunków, zostanie wyświetlony komunikat o błędzie w InvalidUserNameOrPasswordMessage etykiecie, a właściwość programu obsługi zdarzeń e.Cancel jest ustawiona na true . Jeśli e.Cancel jest ustawiona na true , formancie CreateUserWizard skróci swój przepływ pracy i efektywnie anuluje proces tworzenia konta użytkownika.

Rysunek 15 pokazuje zrzut ekranu, CreatingUserAccounts.aspx gdy użytkownik wprowadza nazwę użytkownika z spacjami wiodącymi.

Nazwy użytkowników zawierające spacje wiodące lub końcowe są niedozwolone

Ilustracja 15. nazwy użytkowników z spacjami wiodącymi lub końcowymi są niedozwolone (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Note

Zobaczymy przykład użycia zdarzenia kontrolki formancie CreateUserWizard CreatedUser w samouczku przechowywanie dodatkowych informacji o użytkownikach .

Podsumowanie

Membership CreateUser Metoda klasy tworzy nowe konto użytkownika w środowisku członkostwa. Jest to możliwe dzięki delegowaniu wywołania do skonfigurowanego dostawcy członkostwa. W przypadku SqlMembershipProvider , CreateUser Metoda dodaje rekord do aspnet_Users aspnet_Membership tabel i bazy danych.

Chociaż nowe konta użytkowników mogą być tworzone programowo (jak zostało to opisane w kroku 5), szybszym i łatwiejszym rozwiązaniem jest użycie formantu formancie CreateUserWizard. Ta kontrolka renderuje interfejs użytkownika wieloetapowego służący do zbierania informacji o użytkownikach i tworzenia nowego użytkownika w środowisku członkostwa. Pod względem okładek ten formant używa tej samej metody, która została Membership.CreateUser sprawdzona w kroku 5, ale kontrolka tworzy interfejs użytkownika, kontrolki walidacji i reaguje na błędy tworzenia konta użytkownika bez konieczności pisania Lick kodu.

W tym momencie mamy wbudowaną funkcję tworzenia nowych kont użytkowników. Jednak strona logowania nadal jest sprawdzana pod kątem tych zakodowanych poświadczeń, które zostały określone z powrotem w drugim samouczku. W następnym samouczku będziemy aktualizować, Login.aspx Aby sprawdzić poprawność podanych poświadczeń użytkownika względem struktury członkostwa.

Szczęśliwe programowanie!

Dalsze informacje

Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zapoznaj się z następującymi zasobami:

Informacje o autorze

Scott Mitchell, autor wielu książek ASP/ASP. NET Books i założyciel of 4GuysFromRolla.com, pracował z technologiami sieci Web firmy Microsoft od czasu 1998. Scott działa jako niezależny konsultant, trainer i składnik zapisywania. Jego Najnowsza książka to Sams ASP.NET 2,0 w ciągu 24 godzin. W witrynie Scott można skontaktować się z mitchell@4guysfromrolla.com blogiem http://ScottOnWriting.NET .

Specjalne podziękowania dla...

Ta seria samouczków została sprawdzona przez wielu przydatnych recenzentów. Recenzent potencjalnych klientów dla tego samouczka został Teresa Murphy. Chcesz przeglądać moje nadchodzące artykuły MSDN? Jeśli tak, upuść mi linię na mitchell@4GuysFromRolla.com .