Udostępnij za pośrednictwem


Odblokowywanie i zatwierdzanie kont użytkowników (VB)

Autor: Scott Mitchell

Uwaga

Ponieważ ten artykuł został napisany, dostawcy ASP.NET członkostwa zostały zastąpione przez usługę ASP.NET Identity. Zdecydowanie zalecamy aktualizowanie aplikacji w celu korzystania z platformy ASP.NET Identity , a nie dostawców członkostwa opisanych w tym artykule. ASP.NET Identity ma wiele zalet w systemie członkostwa ASP.NET, w tym :

  • Lepsza wydajność
  • Ulepszona rozszerzalność i możliwość testowania
  • Obsługa uwierzytelniania OAuth, OpenID Connect i uwierzytelniania dwuskładnikowego
  • Obsługa tożsamości opartej na oświadczeniach
  • Lepsza współdziałanie z platformą ASP.Net Core

W tym samouczku pokazano, jak utworzyć stronę internetową dla administratorów w celu zarządzania zablokowanymi i zatwierdzonymi stanami użytkowników. Zobaczymy również, jak zatwierdzić nowych użytkowników dopiero po zweryfikowaniu ich adresu e-mail.

Wprowadzenie

Wraz z nazwą użytkownika, hasłem i pocztą e-mail każde konto użytkownika ma dwa pola stanu, które określają, czy użytkownik może zalogować się do witryny: zablokowany i zatwierdzony. Użytkownik jest automatycznie zablokowany, jeśli podaje nieprawidłowe poświadczenia określoną liczbę razy w ciągu określonej liczby minut (ustawienia domyślne blokują użytkownika po 5 nieprawidłowych próbach logowania w ciągu 10 minut). Zatwierdzony stan jest przydatny w scenariuszach, w których niektóre działania muszą się okazać, zanim nowy użytkownik będzie mógł zalogować się do witryny. Na przykład użytkownik może najpierw zweryfikować swój adres e-mail lub zostać zatwierdzony przez administratora, zanim będzie mógł się zalogować.

Ponieważ zablokowany lub niezatwierdzony użytkownik nie może się zalogować, jest to naturalne, aby zastanawiać się, jak te stany można zresetować. ASP.NET nie zawiera żadnych wbudowanych funkcji ani kontrolek sieci Web do zarządzania zablokowanymi i zatwierdzonymi stanami użytkowników, częściowo dlatego, że te decyzje muszą być obsługiwane w oparciu o lokację. Niektóre witryny mogą automatycznie zatwierdzać wszystkie nowe konta użytkowników (zachowanie domyślne). Inni mają administratora zatwierdzać nowe konta lub nie zatwierdzać użytkowników, dopóki nie odwiedzą linku wysłanego na adres e-mail podany podczas tworzenia konta. Podobnie niektóre witryny mogą blokować użytkowników, dopóki administrator nie zresetuje swojego stanu, podczas gdy inne witryny wysyłają wiadomość e-mail do zablokowanego użytkownika z adresem URL, który może odwiedzić, aby odblokować swoje konto.

W tym samouczku pokazano, jak utworzyć stronę internetową dla administratorów w celu zarządzania zablokowanymi i zatwierdzonymi stanami użytkowników. Zobaczymy również, jak zatwierdzić nowych użytkowników dopiero po zweryfikowaniu ich adresu e-mail.

Krok 1. Zarządzanie zablokowanymi i zatwierdzonymi stanami użytkowników

W samouczku Tworzenie interfejsu do wybierania jednego konta użytkownika z wielu samouczków utworzyliśmy stronę, która zawiera wszystkie konta użytkownika na stronie odfiltrowanej kontrolki GridView. Siatka wyświetla listę nazw i wiadomości e-mail każdego użytkownika, ich zatwierdzonych i zablokowanych stanów, niezależnie od tego, czy są one obecnie w trybie online, oraz wszelkie komentarze dotyczące użytkownika. Aby zarządzać stanami zatwierdzonymi i zablokowanymi przez użytkowników, możemy zmienić tę siatkę. Aby zmienić zatwierdzony stan użytkownika, administrator najpierw zlokalizować konto użytkownika, a następnie edytować odpowiedni wiersz GridView, zaznaczając lub usuń zaznaczenie zatwierdzonego pola wyboru. Alternatywnie można zarządzać zatwierdzonymi i zablokowanymi stanami za pośrednictwem oddzielnej strony ASP.NET.

Na potrzeby tego samouczka użyjemy dwóch stron ASP.NET: ManageUsers.aspx i UserInformation.aspx. Chodzi o to, aby ManageUsers.aspx wyświetlić listę kont użytkowników w systemie, a jednocześnie UserInformation.aspx umożliwia administratorowi zarządzanie zatwierdzonymi i zablokowanymi stanami dla określonego użytkownika. Naszym pierwszym zamówieniem biznesowym jest rozszerzenie kontrolki GridView w ManageUsers.aspx , aby uwzględnić obiekt HyperLinkField, który renderuje się jako kolumna łączy. Chcemy, aby każdy link wskazywał UserInformation.aspx?user=UserNamewartość , gdzie UserName jest nazwą użytkownika do edycji.

Uwaga

Jeśli pobrano kod samouczka Odzyskiwanie i zmienianie haseł, być może zauważysz, że ManageUsers.aspx strona zawiera już zestaw linków "Zarządzaj", a UserInformation.aspx strona udostępnia interfejs umożliwiający zmianę hasła wybranego użytkownika. Postanowiłem nie replikować tej funkcji w kodzie skojarzonym z tym samouczkiem, ponieważ działał przez obejście interfejsu API członkostwa i działanie bezpośrednio z bazą danych SQL Server w celu zmiany hasła użytkownika. Ten samouczek rozpoczyna się od podstaw na UserInformation.aspx stronie.

ManageUsers.aspx Otwórz stronę i dodaj obiekt HyperLinkField do kontrolki UserAccounts GridView. Ustaw właściwość HyperLinkField Text na wartość "Manage" (Zarządzanie), a jej DataNavigateUrlFormatStringDataNavigateUrlFields właściwości i na wartość i wartość UserName "UserInformation.aspx?user={0}", odpowiednio. Te ustawienia konfigurują pole HyperLinkField tak, aby wszystkie hiperlinki wyświetlały tekst "Zarządzaj", ale każdy link przekazuje odpowiednią wartość UserName do ciągu zapytania.

Po dodaniu pola HyperLinkField do kontrolki GridView poświęć chwilę, aby wyświetlić ManageUsers.aspx stronę za pośrednictwem przeglądarki. Jak pokazano na rysunku 1, każdy wiersz GridView zawiera teraz link "Zarządzaj". Link "Zarządzaj" dla Bruce wskazuje na UserInformation.aspx?user=Bruce, natomiast link "Zarządzaj" dla Dave wskazuje na UserInformation.aspx?user=Dave.

Funkcja HyperLinkField dodaje element

Rysunek 1. HiperLinkField dodaje link "Zarządzaj" dla każdego konta użytkownika (kliknij, aby wyświetlić obraz pełnowymiarowy)

Za chwilę utworzymy interfejs użytkownika i kod UserInformation.aspx strony, ale najpierw omówimy sposób programowego zmieniania zablokowanych i zatwierdzonych stanów użytkownika. Klasa MembershipUser maIsLockedOut właściwości i IsApproved. Właściwość IsLockedOut jest tylko do odczytu. Nie ma mechanizmu programowego blokowania użytkownika; aby odblokować użytkownika, użyj MembershipUser metody klasyUnlockUser. Właściwość IsApproved jest czytelna i zapisywalna. Aby zapisać wszelkie zmiany w tej właściwości, musimy wywołać Membershipmetodę klasyUpdateUser, przekazując zmodyfikowany MembershipUser obiekt.

IsApproved Ponieważ właściwość jest czytelna i zapisywalna, kontrolka CheckBox jest prawdopodobnie najlepszym elementem interfejsu użytkownika do konfigurowania tej właściwości. Jednak pole wyboru nie będzie działać dla IsLockedOut właściwości, ponieważ administrator nie może zablokować użytkownika, może odblokować tylko użytkownika. Odpowiedni interfejs użytkownika dla właściwości to przycisk, który po kliknięciu IsLockedOut odblokuje konto użytkownika. Ten przycisk powinien być włączony tylko wtedy, gdy użytkownik jest zablokowany.

UserInformation.aspxTworzenie strony

Teraz możemy zaimplementować interfejs użytkownika w programie UserInformation.aspx. Otwórz tę stronę i dodaj następujące kontrolki sieci Web:

  • Kontrolka HyperLink, która po kliknięciu ManageUsers.aspx zwraca administratora do strony.
  • Kontrolka Etykieta sieci Web do wyświetlania nazwy wybranego użytkownika. Ustaw tę etykietę ID na UserNameLabel wartość i wyczyść jej właściwość Text.
  • Kontrolka CheckBox o nazwie IsApproved. Ustaw jej AutoPostBack właściwość na True.
  • Kontrolka Etykieta do wyświetlania ostatniej zablokowanej daty użytkownika. Nadaj tej etykiecie LastLockedOutDateLabel nazwę i wyczyść jej Text właściwość.
  • Przycisk umożliwiający odblokowanie użytkownika. Nadaj temu przyciskowi UnlockUserButton nazwę i ustaw jej Text właściwość na "Odblokuj użytkownika".
  • Kontrolka Etykieta do wyświetlania komunikatów o stanie, takich jak "Stan zatwierdzony użytkownika została zaktualizowana". Nadaj tej kontrolce StatusMessagenazwę , wyczyść jej Text właściwość i ustaw jej CssClass właściwość na Important. (The Important Klasa CSS jest definiowana w Styles.css pliku arkusza stylów. Wyświetla odpowiedni tekst w dużej, czerwonej czcionki).

Po dodaniu tych kontrolek widok Projektu w programie Visual Studio powinien wyglądać podobnie do zrzutu ekranu na rysunku 2.

Tworzenie interfejsu użytkownika dla pliku UserInformation.aspx

Rysunek 2. Tworzenie interfejsu użytkownika dla UserInformation.aspx (kliknij, aby wyświetlić obraz pełnowymiarowy)

Po ukończeniu interfejsu użytkownika następnym zadaniem jest ustawienie kontrolki IsApproved CheckBox i innych kontrolek na podstawie informacji wybranego użytkownika. Utwórz procedurę obsługi zdarzeń dla zdarzenia strony Load i dodaj następujący kod:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If Not Page.IsPostBack Then
          ' If querystring value is missing, send the user to ManageUsers.aspx
          Dim userName As String = Request.QueryString("user")
          If String.IsNullOrEmpty(userName) Then
               Response.Redirect("ManageUsers.aspx")
          End If

          ' Get information about this user
          Dim usr As MembershipUser = Membership.GetUser(userName)
          If usr Is Nothing Then
               Response.Redirect("ManageUsers.aspx")

          End If

          UserNameLabel.Text = usr.UserName
          IsApproved.Checked = usr.IsApproved

          If usr.LastLockoutDate.Year < 2000 Then
               LastLockoutDateLabel.Text = String.Empty
          Else
               LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString()
               UnlockUserButton.Enabled = usr.IsLockedOut
          End If
     End If
End Sub

Powyższy kod rozpoczyna się od upewnienia się, że jest to pierwsza wizyta na stronie, a nie kolejne postback. Następnie odczytuje nazwę użytkownika przekazaną user przez pole querystring i pobiera informacje o tym koncie użytkownika za pośrednictwem Membership.GetUser(username) metody . Jeśli nie podano nazwy użytkownika za pomocą ciągu zapytania lub jeśli nie można odnaleźć określonego użytkownika, administrator zostanie odesłany do ManageUsers.aspx strony.

Wartość MembershipUser obiektu jest następnie wyświetlana UserName w elemecie UserNameLabel , a IsApproved pole wyboru jest sprawdzane na IsApproved podstawie wartości właściwości.

Właściwość MembershipUser obiektu LastLockoutDate zwraca wartość wskazującąDateTime, kiedy użytkownik został ostatnio zablokowany. Jeśli użytkownik nigdy nie został zablokowany, zwracana wartość zależy od dostawcy członkostwa. Po utworzeniu SqlMembershipProvider nowego konta ustawia aspnet_Membership pole tabeli LastLockoutDate na 1754-01-01 12:00:00 AM. Powyższy kod wyświetla pusty ciąg w LastLockoutDateLabel polu , jeśli LastLockoutDate właściwość występuje przed rokiem 2000. W przeciwnym razie część LastLockoutDate daty właściwości jest wyświetlana w etykiecie. Właściwość UnlockUserButton"jest Enabled ustawiona na zablokowany stan użytkownika, co oznacza, że ten przycisk zostanie włączony tylko wtedy, gdy użytkownik zostanie zablokowany.

Poświęć chwilę na przetestowanie UserInformation.aspx strony za pośrednictwem przeglądarki. Oczywiście musisz zacząć od ManageUsers.aspx i wybrać konto użytkownika do zarządzania. Po przybyciu do UserInformation.aspxusługi należy pamiętać, że IsApproved pole wyboru jest sprawdzane tylko wtedy, gdy użytkownik jest zatwierdzony. Jeśli użytkownik kiedykolwiek został zablokowany, zostanie wyświetlona ostatnia zablokowana data. Przycisk Odblokuj użytkownika jest włączony tylko wtedy, gdy użytkownik jest obecnie zablokowany. Sprawdzanie lub usuwanie zaznaczenia IsApproved pola wyboru lub kliknięcie przycisku Odblokuj użytkownika powoduje powrót, ale żadne modyfikacje nie są wprowadzane na konto użytkownika, ponieważ nie utworzyliśmy jeszcze procedur obsługi zdarzeń dla tych zdarzeń.

Wróć do programu Visual Studio i utwórz programy obsługi zdarzeń dla IsApproved zdarzenia CheckBox CheckedChanged i UnlockUser zdarzenia Przycisku Click . W procedurze CheckedChanged obsługi zdarzeń ustaw właściwość użytkownika IsApproved na Checked właściwość CheckBox, a następnie zapisz zmiany za pomocą wywołania metody Membership.UpdateUser. W procedurze obsługi zdarzeń po prostu wywołaj Click metodę MembershipUser obiektu UnlockUser . W obu programach obsługi zdarzeń wyświetl odpowiedni komunikat w etykiecie StatusMessage .

Protected Sub IsApproved_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles IsApproved.CheckedChanged
     'Toggle the user's approved status
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.IsApproved = IsApproved.Checked
     Membership.UpdateUser(usr)

     StatusMessage.Text = "The user's approved status has been updated."

End Sub

Protected Sub UnlockUserButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UnlockUserButton.Click
     'Unlock the user account
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.UnlockUser()
     UnlockUserButton.Enabled = False

     StatusMessage.Text = "The user account has been unlocked."
End Sub

UserInformation.aspxTestowanie strony

Po utworzeniu tych procedur obsługi zdarzeń ponownie zapoznaj się ze stroną i niezatwierdzonym użytkownikiem. Jak pokazano na rysunku 3, na stronie powinien zostać wyświetlony krótki komunikat wskazujący, że właściwość użytkownika IsApproved została pomyślnie zmodyfikowana.

Chris został niezatwierdzony

Rysunek 3. Chris został niezatwierdzony (kliknij, aby wyświetlić obraz pełnowymiarowy)

Następnie wyloguj się i spróbuj zalogować się jako użytkownik, którego konto zostało po prostu niezatwierdzone. Ponieważ użytkownik nie jest zatwierdzony, nie może się zalogować. Domyślnie kontrolka Logowanie wyświetla ten sam komunikat, jeśli użytkownik nie może się zalogować, niezależnie od przyczyny. Jednak w samouczku Weryfikowanie poświadczeń użytkownika względem magazynu użytkowników członkostwa przyjrzeliśmy się ulepszeniu kontrolki Logowania, aby wyświetlić bardziej odpowiedni komunikat. Jak pokazano na rysunku 4, Chris jest wyświetlany komunikat wyjaśniający, że nie może się zalogować, ponieważ jego konto nie zostało jeszcze zatwierdzone.

Chris nie może się zalogować, ponieważ jego konto jest niezatwierdzone

Rysunek 4. Chris nie może zalogować się, ponieważ jego konto jest niezatwierdzone (kliknij, aby wyświetlić obraz pełnowymiarowy)

Aby przetestować zablokowaną funkcjonalność, spróbuj zalogować się jako zatwierdzony użytkownik, ale użyć nieprawidłowego hasła. Powtórz ten proces przez wymaganą liczbę razy, dopóki konto użytkownika nie zostanie zablokowane. Kontrolka Logowania została również zaktualizowana w celu wyświetlenia niestandardowego komunikatu w przypadku próby zalogowania się z zablokowanego konta. Wiesz, że konto zostało zablokowane po rozpoczęciu wyświetlania następującego komunikatu na stronie logowania: "Twoje konto zostało zablokowane z powodu zbyt wielu nieprawidłowych prób logowania. Skontaktuj się z administratorem, aby odblokować konto".

Wróć do ManageUsers.aspx strony i kliknij link Zarządzaj zablokowanym użytkownikiem. Jak pokazano na rysunku 5, powinna zostać wyświetlona wartość w przycisku Odblokuj LastLockedOutDateLabel użytkownika. Kliknij przycisk Odblokuj użytkownika, aby odblokować konto użytkownika. Po odblokowaniu użytkownika będą mogli się zalogować ponownie.

Dave został zablokowany z systemu

Rysunek 5. Dave został zablokowany z systemu (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

Krok 2. Określanie stanu zatwierdzonego nowego użytkownika

Zatwierdzony stan jest przydatny w scenariuszach, w których chcesz wykonać akcję, zanim nowy użytkownik będzie mógł zalogować się i uzyskać dostęp do funkcji specyficznych dla użytkownika witryny. Na przykład możesz uruchomić prywatną witrynę internetową, w której wszystkie strony, z wyjątkiem stron logowania i rejestracji, są dostępne tylko dla uwierzytelnionych użytkowników. Ale co się stanie, jeśli obcy osiągnie witrynę internetową, znajdzie stronę rejestracji i utworzy konto? Aby zapobiec temu, możesz przenieść stronę rejestracji do folderu i wymagać ręcznego Administration utworzenia każdego konta przez administratora. Alternatywnie możesz zezwolić każdemu na rejestrację, ale uniemożliwić dostęp do witryny, dopóki administrator nie zatwierdzi konta użytkownika.

Domyślnie kontrolka CreateUserWizard zatwierdza nowe konta. To zachowanie można skonfigurować przy użyciu właściwości kontrolkiDisableCreatedUser. Ustaw tę właściwość na wartość , aby nie zatwierdzać True nowych kont użytkowników.

Uwaga

Domyślnie kontrolka CreateUserWizard automatycznie loguje się na nowym koncie użytkownika. To zachowanie jest dyktowane przez właściwość kontrolkiLoginCreatedUser. Ponieważ niezatwierdzeni użytkownicy nie mogą zalogować się do witryny, jeśli DisableCreatedUser nowe True konto użytkownika nie jest zalogowane do witryny, niezależnie od wartości LoginCreatedUser właściwości.

Jeśli programowo tworzysz nowe konta użytkowników za pomocą Membership.CreateUser metody, aby utworzyć niezatwierdzone konto użytkownika, użyj jednego z przeciążeń, które akceptują wartość właściwości nowego użytkownika IsApproved jako parametr wejściowy.

Krok 3. Zatwierdzanie użytkowników przez zweryfikowanie adresu Email

Wiele witryn internetowych obsługujących konta użytkowników nie zatwierdza nowych użytkowników, dopóki nie zweryfikują adresu e-mail podanego podczas rejestrowania. Ten proces weryfikacji jest często używany do udaremnienia botów, spamerów i innych ne'er-do-do-wells, ponieważ wymaga unikatowego, zweryfikowanego adresu e-mail i dodaje dodatkowy krok w procesie rejestracji. W przypadku tego modelu, gdy nowy użytkownik zarejestruje się, zostanie wysłana wiadomość e-mail zawierająca link do strony weryfikacji. Odwiedzając link, użytkownik udowodnił, że otrzymał wiadomość e-mail i dlatego podany adres e-mail jest prawidłowy. Strona weryfikacji jest odpowiedzialna za zatwierdzenie użytkownika. Może się to zdarzyć automatycznie, zatwierdzając każdego użytkownika, który dociera do tej strony, lub dopiero po udostępnieniu dodatkowych informacji, takich jak CAPTCHA.

Aby uwzględnić ten przepływ pracy, musimy najpierw zaktualizować stronę tworzenia konta, aby nowi użytkownicy nie zostały zatwierdzeni. EnhancedCreateUserWizard.aspx Otwórz stronę w folderze Membership i ustaw właściwość kontrolki DisableCreatedUser CreateUserWizard na True.

Następnie należy skonfigurować kontrolkę CreateUserWizard, aby wysłać wiadomość e-mail do nowego użytkownika z instrukcjami dotyczącymi weryfikowania konta. W szczególności dołączymy link w wiadomości e-mail do Verification.aspx strony (która jeszcze została utworzona), przekazując ciąg zapytania przez nowego użytkownika UserId . Strona Verification.aspx będzie wyszukiwać określonego użytkownika i oznaczyć je jako zatwierdzone.

Wysyłanie Email weryfikacji do nowych użytkowników

Aby wysłać wiadomość e-mail z kontrolki CreateUserWizard, należy odpowiednio skonfigurować jej MailDefinition właściwość. Jak wspomniano w poprzednim samouczku, kontrolki ChangePassword i PasswordRecovery zawierają MailDefinition właściwość , która działa w taki sam sposób jak kontrolka CreateUserWizard.

Uwaga

Aby użyć MailDefinition właściwości , należy określić opcje dostarczania poczty w pliku Web.config. Aby uzyskać więcej informacji, zobacz Wysyłanie Email w ASP.NET.

Zacznij od utworzenia nowego szablonu wiadomości e-mail o nazwie CreateUserWizard.txt w folderze EmailTemplates . Użyj następującego tekstu dla szablonu:

Hello <%UserName%>! Welcome aboard.

Your new account is almost ready, but before you can login you must first visit:
<%VerificationUrl%>

Once you have visited the verification URL you will be redirected to the login page.

If you have any problems or questions, please reply to this email.

Thanks!

MailDefinitionUstaw właściwość "BodyFileName~/EmailTemplates/CreateUserWizard.txt" i jej Subject właściwość na "Witamy w mojej witrynie internetowej! Aktywuj swoje konto".

Pamiętaj, że CreateUserWizard.txt szablon wiadomości e-mail zawiera <%VerificationUrl%> symbol zastępczy. W tym miejscu zostanie umieszczony adres URL Verification.aspx strony. Element CreateUserWizard automatycznie zastępuje <%UserName%> symbole zastępcze i <%Password%> nazwą użytkownika i hasłem nowego konta, ale nie ma wbudowanego <%VerificationUrl%> symbolu zastępczego. Musimy ręcznie zastąpić go odpowiednim adresem URL weryfikacji.

Aby to zrobić, utwórz procedurę obsługi zdarzeń dla zdarzenia CreateUserWizard SendingMail i dodaj następujący kod:

Protected Sub NewUserWizard_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles NewUserWizard.SendingMail
     'Get the UserId of the just-added user
     Dim newUser As MembershipUser = Membership.GetUser(NewUserWizard.UserName)
     Dim newUserId As Guid = CType(newUser.ProviderUserKey, Guid)

     ' Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
     Dim urlBase As String = Request.Url.GetLeftPart(UriPartial.Authority) & Request.ApplicationPath
     Dim verifyUrl As String = "/Verification.aspx?ID=" + newUserId.ToString()
     Dim fullUrl As String = urlBase & verifyUrl

     ' Replace <%VerificationUrl%> with the appropriate URL and querystring

     e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl)
End Sub

Zdarzenie SendingMail jest uruchamiane po CreatedUser zdarzeniu, co oznacza, że do czasu wykonania powyższego programu obsługi zdarzeń nowe konto użytkownika zostało już utworzone. Możemy uzyskać dostęp do wartości nowego użytkownika UserId , wywołując metodę Membership.GetUser , przekazując UserName wprowadzoną w kontrolce CreateUserWizard. Następnie zostanie utworzony adres URL weryfikacji. Request.Url.GetLeftPart(UriPartial.Authority) Instrukcja zwraca http://yourserver.com część adresu URL; Request.ApplicationPath zwraca ścieżkę, w której aplikacja jest zakorzeniona. Adres URL weryfikacji jest następnie zdefiniowany jako Verification.aspx?ID=userId. Te dwa ciągi są następnie łączone w celu utworzenia kompletnego adresu URL. Na koniec treść wiadomości e-mail (e.Message.Body) zawiera wszystkie wystąpienia zastąpione <%VerificationUrl%> pełnym adresem URL.

Efekt netto polega na tym, że nowi użytkownicy są niezatwierdzeni, co oznacza, że nie mogą zalogować się do witryny. Ponadto są one automatycznie wysyłane pocztą e-mail z linkiem do adresu URL weryfikacji (zobacz Rysunek 6).

Nowy użytkownik otrzymuje Email z linkiem do adresu URL weryfikacji

Rysunek 6. Nowy użytkownik otrzymuje Email z linkiem do adresu URL weryfikacji (kliknij, aby wyświetlić obraz pełnowymiarowy)

Uwaga

Domyślny krok CreateUserWizard kontrolki CreateUserWizard wyświetla komunikat informujący o utworzeniu konta użytkownika i wyświetl przycisk Kontynuuj. Kliknięcie tego elementu powoduje przejście użytkownika do adresu URL określonego przez właściwość kontrolki ContinueDestinationPageUrl . Element CreateUserWizard w EnhancedCreateUserWizard.aspx programie jest skonfigurowany do wysyłania nowych użytkowników do ~/Membership/AdditionalUserInfo.aspxelementu , który monituje użytkownika o podanie swojego rodzinnego miasta, adresu URL strony głównej i podpisu. Ponieważ te informacje mogą być dodawane tylko przez zalogowanych użytkowników, warto zaktualizować tę właściwość, aby wysyłać użytkowników z powrotem do strony głównej witryny (~/Default.aspx). Ponadto EnhancedCreateUserWizard.aspx należy rozszerzyć stronę lub krok CreateUserWizard, aby poinformować użytkownika, że został wysłany weryfikacyjny adres e-mail, a ich konto nie zostanie aktywowane, dopóki nie będą postępować zgodnie z instrukcjami podanymi w tej wiadomości e-mail. Pozostawiam te modyfikacje jako ćwiczenie dla czytelnika.

Tworzenie strony weryfikacji

Naszym ostatnim zadaniem jest utworzenie Verification.aspx strony. Dodaj tę stronę do folderu głównego, kojarząc ją ze stroną wzorcową Site.master . Jak zrobiliśmy z większością poprzednich stron zawartości dodanych do witryny, usuń kontrolkę Zawartość odwołującą LoginContent się do elementu ContentPlaceHolder, aby strona zawartości korzystała z domyślnej zawartości strony wzorcowej.

Dodaj kontrolkę Etykieta sieci Web do Verification.aspx strony, ustaw jej StatusMessageID wartość i wyczyść jej właściwość tekstową. Następnie utwórz procedurę obsługi zdarzeń Page_Load i dodaj następujący kod:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If String.IsNullOrEmpty(Request.QueryString("ID")) Then
          StatusMessage.Text = "The UserId was not included in the querystring..."
     Else
          Dim userId As Guid
          Try
               userId = New Guid(Request.QueryString("ID"))
          Catch
               StatusMessage.Text = "The UserId passed into the querystring is not in the proper format..."

               Exit Sub
          End Try

          Dim usr As MembershipUser = Membership.GetUser(userId)
          If usr Is Nothing Then
               StatusMessage.Text = "User account could not be found..."
          Else
               ' Approve the user
               usr.IsApproved = True
               Membership.UpdateUser(usr)
               StatusMessage.Text = "Your account has been approved. Please <a href=""Login.aspx"">login</a> to the site."

          End If
     End If
End Sub

Większość powyższego kodu sprawdza, czy identyfikator UserId dostarczony za pomocą ciągu zapytania istnieje, że jest prawidłową wartością Guid i odwołuje się do istniejącego konta użytkownika. Jeśli wszystkie te testy przejdą, konto użytkownika zostanie zatwierdzone; w przeciwnym razie zostanie wyświetlony odpowiedni komunikat o stanie.

Rysunek 7 przedstawia Verification.aspx stronę odwiedzaną za pośrednictwem przeglądarki.

Konto nowego użytkownika jest teraz zatwierdzone

Rysunek 7. Konto nowego użytkownika jest teraz zatwierdzone (kliknij, aby wyświetlić obraz pełnowymiarowy)

Podsumowanie

Wszystkie konta użytkowników członkostwa mają dwa stany, które określają, czy użytkownik może zalogować się do witryny: IsLockedOut i IsApproved. Obie te właściwości muszą być True przeznaczone dla użytkownika do logowania.

Zablokowany stan użytkownika jest używany jako środek bezpieczeństwa, aby zmniejszyć prawdopodobieństwo włamania się do witryny przez metody siłowe. W szczególności użytkownik jest zablokowany, jeśli istnieje pewna liczba nieprawidłowych prób logowania w określonym przedziale czasu. Te ograniczenia można konfigurować za pomocą ustawień dostawcy członkostwa w programie Web.config.

Stan zatwierdzony jest często używany jako środek, aby uniemożliwić nowym użytkownikom logowanie się, dopóki niektóre działania nie zajdą. Być może witryna wymaga, aby nowe konta zostały najpierw zatwierdzone przez administratora lub, jak pokazano w kroku 3, weryfikując ich adres e-mail.

Szczęśliwe programowanie!

Informacje o autorze

Scott Mitchell, autor wielu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 2.0 w ciągu 24 godzin. Scott można dotrzeć pod mitchell@4guysfromrolla.com adresem lub za pośrednictwem swojego bloga pod adresem http://ScottOnWriting.NET.

Specjalne podziękowania...

Ta seria samouczków została przejrzyona przez wielu przydatnych recenzentów. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi linię na mitchell@4GuysFromRolla.com