Sdílet prostřednictvím


Odemykání a schvalování uživatelských účtů (C#)

Scott Mitchell

Poznámka

Od napsání tohoto článku jsou zprostředkovatelé členství ASP.NET nahrazeni ASP.NET Identity. Důrazně doporučujeme aktualizovat aplikace tak, aby používaly platformu ASP.NET Identity Platform místo zprostředkovatelů členství, které byly uvedené v době psaní tohoto článku. ASP.NET Identity má oproti systému členství ASP.NET řadu výhod, mezi které patří:

  • Lepší výkon
  • Vylepšená rozšiřitelnost a testovatelnost
  • Podpora OAuth, OpenID Connect a dvojúrovňového ověřování
  • Podpora identit na základě deklarací identity
  • Lepší interoperabilita s ASP.Net Core

V tomto kurzu se dozvíte, jak vytvořit webovou stránku pro správce, aby mohli spravovat stav uzamčení a schválení uživatelů. Ukážeme si také, jak schválit nové uživatele až po ověření e-mailové adresy.

Úvod

Spolu s uživatelským jménem, heslem a e-mailem má každý uživatelský účet dvě pole stavu, která určují, jestli se uživatel může k webu přihlásit: uzamčeno a schváleno. Pokud uživatel zadá během zadaného počtu minut neplatné přihlašovací údaje, automaticky se uzamkne (výchozí nastavení uživatele uzamkne po 5 neplatných pokusech o přihlášení během 10 minut). Schválený stav je užitečný ve scénářích, kdy se musí provést nějaká akce, aby se nový uživatel mohl přihlásit k webu. Uživatel může například před přihlášením nejprve ověřit svoji e-mailovou adresu nebo být schválen správcem.

Protože se uzamčený nebo neschválaný uživatel nemůže přihlásit, je přirozené se jen divit, jak se tyto stavy dají resetovat. ASP.NET neobsahuje žádné integrované funkce ani webové ovládací prvky pro správu uzamčených a schválených stavů uživatelů, částečně proto, že tato rozhodnutí musí být zpracována na základě site-by-site. Některé weby můžou automaticky schvalovat všechny nové uživatelské účty (výchozí chování). Jiní uživatelé můžou nové účty schvalovat nebo neschvalují uživatele, dokud nenavštíví odkaz odeslaný na e-mailovou adresu, kterou zadali při registraci. Podobně některé weby můžou uživatele uzamknout, dokud správce nezmění jejich stav, zatímco jiné pošlou uzamčeným uživatelům e-mail s adresou URL, kterou může navštívit, aby odemkl svůj účet.

V tomto kurzu se dozvíte, jak vytvořit webovou stránku pro správce, aby mohli spravovat stav uzamčení a schválení uživatelů. Ukážeme si také, jak schválit nové uživatele až po ověření e-mailové adresy.

Krok 1: Správa stavů Uzamčeno a Schváleno uživatelům

V kurzu Building an Interface to Select One User Account from Many (Vytvoření rozhraní pro výběr jednoho uživatelského účtu z mnoha) jsme sestrojili stránku, která obsahuje seznam jednotlivých uživatelských účtů v stránkovaném filtrovaném zobrazení GridView. Mřížka obsahuje jména a e-maily jednotlivých uživatelů, jejich schválené a uzamčené stavy, informace o tom, jestli jsou aktuálně online, a případné komentáře k uživateli. Abychom mohli spravovat stavy schválených a uzamčených uživatelů, mohli bychom tuto mřížku upravit. Pokud chcete změnit stav schváleného uživatele, správce nejprve vyhledá uživatelský účet a pak upraví odpovídající řádek GridView a zaškrtne nebo zruší zaškrtnutí políčka Schválené. Případně můžeme spravovat schválené a uzamčené stavy prostřednictvím samostatné ASP.NET stránky.

Pro účely tohoto kurzu použijeme dvě ASP.NET stránky: ManageUsers.aspx a UserInformation.aspx. Myšlenka spočívá v tom, UserInformation.aspx že ManageUsers.aspx seznam uživatelských účtů v systému a umožní správci spravovat schválené a uzamčené stavy pro konkrétního uživatele. Naším prvním obchodním řádem je rozšířit GridView v ManageUsers.aspx tak, aby zahrnoval HyperLinkField, který se vykreslí jako sloupec odkazů. Chceme, aby každý odkaz odkazovat na UserInformation.aspx?user=UserName, kde UserName je jméno uživatele, který se má upravit.

Poznámka

Pokud jste si stáhli kód kurzu Obnovení a změna hesel , možná jste si všimli, že ManageUsers.aspx stránka již obsahuje sadu odkazů "Spravovat" a UserInformation.aspx stránka poskytuje rozhraní pro změnu hesla vybraného uživatele. Rozhodl(a) jsem se tuto funkci v kódu přidruženém k tomuto kurzu nereplikovat, protože fungovala tak, že obešla rozhraní API pro členství a fungovala přímo s databází SQL Server a změnila heslo uživatele. Tento kurz začíná od začátku na UserInformation.aspx stránce.

ManageUsers.aspx Otevřete stránku a přidejte HyperLinkField do objektu UserAccounts GridView. Nastavte vlastnost HyperLinkField Text na Spravovat a jeho DataNavigateUrlFields vlastnosti DataNavigateUrlFormatString na UserName a UserInformation.aspx?user={0}. Tato nastavení konfigurují HyperLinkField tak, aby všechny hypertextové odkazy zobrazovaly text "Spravovat", ale každý odkaz předává příslušnou hodnotu UserName do řetězce dotazu.

Po přidání HyperLinkField do objektu GridView si chvíli ManageUsers.aspx prohlédněte stránku v prohlížeči. Jak ukazuje obrázek 1, každý řádek GridView teď obsahuje odkaz Spravovat. Odkaz "Spravovat" pro Bruce odkazuje na UserInformation.aspx?user=Bruce, zatímco "Spravovat" odkaz pro Dave odkazuje na UserInformation.aspx?user=Dave.

HyperLinkField přidá

Obrázek 1: HyperLinkField přidá odkaz "Spravovat" pro každý uživatelský účet (kliknutím zobrazíte obrázek v plné velikosti)

Uživatelské rozhraní a kód pro UserInformation.aspx stránku vytvoříme za chvíli, ale nejprve si promluvíme o tom, jak programově změnit stav uzamčení a schválení uživatele. TřídaMembershipUserIsLockedOut vlastnosti aIsApproved. Vlastnost IsLockedOut je jen pro čtení. Neexistuje žádný mechanismus pro programové uzamčení uživatele. k odemknutí uživatele použijte metodu MembershipUser třídyUnlockUser. Vlastnost IsApproved je čitelná a zapisovatelná. Pokud chcete uložit změny této vlastnosti, musíme volat metodu Membership třídy UpdateUsera předat změněný MembershipUser objekt.

Vzhledem k tomu, IsApproved že vlastnost je čitelná a zapisovatelná, je ovládací prvek CheckBox pravděpodobně nejlepším prvkem uživatelského rozhraní pro konfiguraci této vlastnosti. CheckBox však nebude pro IsLockedOut vlastnost fungovat, protože správce nemůže uživatele uzamknout, může pouze odemknout uživatele. Vhodným uživatelským rozhraním IsLockedOut pro vlastnost je tlačítko, které po kliknutí odemkne uživatelský účet. Toto tlačítko by mělo být povolené jenom v případě, že je uživatel uzamčený.

UserInformation.aspxVytvoření stránky

Teď jsme připraveni implementovat uživatelské rozhraní v nástroji UserInformation.aspx. Otevřete tuto stránku a přidejte následující webové ovládací prvky:

  • Ovládací prvek HyperLink, který po kliknutí vrátí správce na ManageUsers.aspx stránku.
  • A Label Web ovládací prvek pro zobrazení jména vybraného uživatele. Nastavte tento popisek ID na UserNameLabel a vymažte jeho Text vlastnost.
  • Ovládací prvek CheckBox s názvem IsApproved. Nastavte jeho AutoPostBack vlastnost na true.
  • Ovládací prvek Popisek pro zobrazení data posledního uzamčení uživatele. Pojmenujte tento popisek LastLockedOutDateLabel a vymažte jeho Text vlastnost.
  • Tlačítko pro odemknutí uživatele. Pojmenujte toto tlačítko UnlockUserButton a nastavte jeho Text vlastnost na Odemknout uživatele.
  • Ovládací prvek Popisek pro zobrazení stavových zpráv, například "Stav schválen uživatele byl aktualizován". Pojmenujte tento ovládací prvek StatusMessage, vymažte jeho Text vlastnost a nastavte jeho CssClass vlastnost na Important. Important( Třída CSS je definována Styles.css v souboru šablon stylů; zobrazuje odpovídající text velkým červeným písmem.)

Po přidání těchto ovládacích prvků by návrhové zobrazení v sadě Visual Studio mělo vypadat podobně jako snímek obrazovky na obrázku 2.

Vytvoření uživatelského rozhraní pro UserInformation.aspx

Obrázek 2: Vytvoření uživatelského rozhraní pro UserInformation.aspx (kliknutím zobrazíte obrázek v plné velikosti)

Po dokončení uživatelského rozhraní je naším dalším úkolem nastavit IsApproved ovládací prvky CheckBox a další ovládací prvky na základě informací o vybraném uživateli. Vytvořte obslužnou rutinu události pro událost stránky Load a přidejte následující kód:

protected void Page_Load(object sender, EventArgs e)
{
     if (!Page.IsPostBack)
     {

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

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

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

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

          UnlockUserButton.Enabled = usr.IsLockedOut;
     }
}

Výše uvedený kód začíná tím, že se ujistěte, že se jedná o první návštěvu stránky, a ne o následný postback. Pak přečte uživatelské jméno předané přes user pole řetězce dotazu a načte informace o tomto uživatelském účtu prostřednictvím Membership.GetUser(username) metody . Pokud prostřednictvím řetězce dotazu nebylo zadáno žádné uživatelské jméno nebo pokud se zadaného uživatele nepodařilo najít, je správce odeslán zpět na ManageUsers.aspx stránku.

Hodnota MembershipUser objektu UserName se pak zobrazí v objektu UserNameLabel a IsApproved checkBox je zaškrtnutá na IsApproved základě hodnoty vlastnosti.

Vlastnost MembershipUser objektu LastLockoutDateDateTime vrátí hodnotu označující, kdy byl uživatel naposledy uzamčen. Pokud uživatel nikdy nebyl uzamčen, vrácená hodnota závisí na poskytovateli členství. Při vytvoření SqlMembershipProvideraspnet_Membership nového účtu nastaví pole tabulky LastLockoutDate na 1754-01-01 12:00:00 AMhodnotu . Výše uvedený kód zobrazí prázdný řetězec v LastLockoutDateLabel případě, že LastLockoutDate se vlastnost vyskytuje před rokem 2000; v opačném případě je část LastLockoutDate vlastnosti datum zobrazena v popisku. Vlastnost UnlockUserButton' s Enabled je nastavena na stav uzamčení uživatele, což znamená, že toto tlačítko bude povoleno pouze v případě, že je uživatel uzamčen.

Chvíli si stránku otestujte UserInformation.aspx v prohlížeči. Samozřejmě budete muset začít od ManageUsers.aspx a vybrat uživatelský účet, který chcete spravovat. Po příjezdu na UserInformation.aspxadresu si všimněte, že zaškrtávací políčko je zaškrtnuté pouze v případě, že IsApproved je uživatel schválen. Pokud byl uživatel někdy uzamčen, zobrazí se datum posledního uzamčení. Tlačítko Odemknout uživatele je povolené jenom v případě, že je uživatel aktuálně uzamčený. Zaškrtnutí nebo zrušení zaškrtnutí IsApproved políčka nebo kliknutí na tlačítko Odemknout uživatele způsobí zpětné odeslání, ale v uživatelském účtu se neprovedou žádné změny, protože jsme pro tyto události ještě nevytvořili obslužné rutiny událostí.

Vraťte se do sady Visual Studio a vytvořte obslužné rutiny událostí pro IsApproved událost CheckBox CheckedChanged a UnlockUser událost tlačítka Click . V obslužné rutině CheckedChanged události nastavte vlastnost uživatele IsApproved na Checked vlastnost CheckBox a pak uložte změny pomocí volání metody Membership.UpdateUser. V obslužné rutině Click události jednoduše zavolejte metodu MembershipUser objektu UnlockUser . V obou obslužných rutinách událostí zobrazte v popisku StatusMessage vhodnou zprávu.

protected void IsApproved_CheckedChanged(object sender, EventArgs e)
{
     // Toggle the user's approved status
     string userName = Request.QueryString["user"];
     MembershipUser usr = Membership.GetUser(userName);
     usr.IsApproved = IsApproved.Checked;
     Membership.UpdateUser(usr);
     StatusMessage.Text = "The user's approved status has been updated.";
}

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

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

UserInformation.aspxTestování stránky

Když jsou tyto obslužné rutiny událostí na místě, přejděte znovu na stránku a zrušte oprávnění uživatele. Jak ukazuje obrázek 3, měla by se na stránce zobrazit stručná zpráva oznamující, že vlastnost uživatele IsApproved byla úspěšně změněna.

Chris byl neschválené

Obrázek 3: Chris byl neschválené (kliknutím zobrazíte obrázek v plné velikosti)

Pak se odhlaste a zkuste se přihlásit jako uživatel, jehož účet byl právě neschválené. Vzhledem k tomu, že uživatel není schválen, nemůže se přihlásit. Ve výchozím nastavení zobrazí ovládací prvek Login stejnou zprávu, pokud se uživatel nemůže přihlásit bez ohledu na důvod. V kurzu Ověřování přihlašovacích údajů uživatele v úložišti uživatelů členství jsme se ale podívali na vylepšení ovládacího prvku Přihlášení tak, aby zobrazoval vhodnější zprávu. Jak ukazuje obrázek 4, zobrazí se Chrisovi zpráva, že se nemůže přihlásit, protože jeho účet ještě není schválený.

Chris se nemůže přihlásit, protože jeho účet není schválen

Obrázek 4: Chris se nemůže přihlásit, protože jeho účet není schválen (kliknutím zobrazíte obrázek v plné velikosti)

Pokud chcete otestovat uzamčené funkce, zkuste se přihlásit jako schválený uživatel, ale použijte nesprávné heslo. Tento postup opakujte s potřebným počtem opakování, dokud se účet uživatele nezamkne. Ovládací prvek Login byl také aktualizován tak, aby při pokusu o přihlášení z uzamčeného účtu zobrazil vlastní zprávu. Víte, že účet byl uzamčen, jakmile se na přihlašovací stránce začne zobrazovat následující zpráva: "Váš účet byl uzamčen kvůli příliš mnoha neplatným pokusům o přihlášení. Obraťte se na správce a požádejte ho o odemknutí účtu.

Vraťte se na ManageUsers.aspx stránku a klikněte na odkaz Spravovat pro uzamčeného uživatele. Jak ukazuje obrázek 5, měla by se zobrazit hodnota v tlačítku LastLockedOutDateLabel Odemknout uživatele, které by mělo být povolené. Kliknutím na tlačítko Odemknout uživatele odemkněte uživatelský účet. Jakmile uživatele odemknete, bude se moct znovu přihlásit.

Dave byl uzamčen ze systému

Obrázek 5: Dave byl uzamčen ze systému (kliknutím zobrazíte obrázek v plné velikosti)

Krok 2: Zadání stavu schválení nových uživatelů

Schválený stav je užitečný ve scénářích, kdy chcete provést nějakou akci předtím, než se nový uživatel bude moct přihlásit a získat přístup k funkcím webu, které jsou specifické pro uživatele. Můžete například provozovat privátní web, kde jsou všechny stránky s výjimkou přihlašovacích a registračních stránek přístupné jenom ověřeným uživatelům. Ale co se stane, když cizí osoba dosáhne vašeho webu, najde registrační stránku a vytvoří účet? Chcete-li tomu zabránit, můžete přesunout registrační stránku do Administration složky a vyžadovat, aby správce ručně vytvořil každý účet. Případně můžete povolit registraci komukoli, ale zakázat přístup k webu, dokud správce neschválí uživatelský účet.

Ve výchozím nastavení ovládací prvek CreateUserWizard schvaluje nové účty. Toto chování můžete nakonfigurovat pomocí vlastnosti ovládacího prvkuDisableCreatedUser. Pokud chcete neschválovat nové uživatelské účty, nastavte tuto vlastnost na true hodnotu .

Poznámka

Ve výchozím nastavení ovládací prvek CreateUserWizard automaticky protokoluje nový uživatelský účet. Toto chování je dáno vlastností ovládacího prvkuLoginCreatedUser. Vzhledem k tomu, že se neschválené uživatele nemůžou přihlásit k webu, DisableCreatedUsertrue není nový uživatelský účet přihlášen k webu bez ohledu na hodnotu LoginCreatedUser vlastnosti.

Pokud vytváříte nové uživatelské účty prostřednictvím kódu programu pomocí Membership.CreateUser metody, použijte k vytvoření neschváleného uživatelského účtu jedno z přetížení, které jako vstupní parametr přijímají hodnotu vlastnosti nového uživatele IsApproved .

Krok 3: Schválení uživatelů ověřením jejich Email adresy

Mnoho webů, které podporují uživatelské účty, neschvaluje nové uživatele, dokud neověří e-mailovou adresu, kterou zadali při registraci. Tento proces ověření se běžně používá k maření robotů, spammerů a dalších ne'er-do-wells, protože vyžaduje jedinečnou ověřenou e-mailovou adresu a přidává další krok v procesu registrace. Když se u tohoto modelu zaregistruje nový uživatel, odešle se mu e-mailová zpráva, která obsahuje odkaz na ověřovací stránku. Navštívením odkazu uživatel prokázal, že obdržel e-mail, a proto je zadaná e-mailová adresa platná. Za schválení uživatele zodpovídá ověřovací stránka. K tomu může dojít automaticky, čímž se schválí každý uživatel, který se dostane na tuto stránku, nebo až poté, co uživatel poskytne některé další informace, například CAPTCHA.

Abychom tento pracovní postup přizpůsobili, musíme nejprve aktualizovat stránku pro vytvoření účtu tak, aby noví uživatelé byli neschválené. EnhancedCreateUserWizard.aspx Otevřete stránku ve Membership složce a nastavte vlastnost ovládacího prvku DisableCreatedUser CreateUserWizard na true.

Dále musíme nakonfigurovat ovládací prvek CreateUserWizard tak, aby novému uživateli poslal e-mail s pokyny, jak ověřit jeho účet. Konkrétně do e-mailu zahrneme odkaz na Verification.aspx stránku (kterou jsme ještě vytvořili) a předáme novým uživatelům UserId řetězec dotazu. Stránka Verification.aspx vyhledá zadaného uživatele a označí ho jako schváleného.

Odeslání ověřovacího Email novým uživatelům

Chcete-li odeslat e-mail z ovládacího prvku CreateUserWizard, nakonfigurujte jeho MailDefinition vlastnost odpovídajícím způsobem. Jak bylo popsáno v předchozím kurzu, ovládací prvky ChangePassword a PasswordRecovery obsahují MailDefinition vlastnost , která funguje stejným způsobem jako CreateUserWizard ovládací prvek.

Poznámka

Chcete-li použít MailDefinition vlastnost, musíte zadat možnosti doručení pošty v nástroji Web.config. Další informace najdete v tématu Odesílání Email v ASP.NET.

Začněte vytvořením nové e-mailové šablony s názvem CreateUserWizard.txt ve EmailTemplates složce. Pro šablonu použijte následující text:

Hello <%UserName%>! Welcome aboard.

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

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

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

Thanks!

MailDefinition' Nastavte vlastnost s BodyFileName na ~/EmailTemplates/CreateUserWizard.txt a její Subject vlastnost na Vítejte na mém webu! Aktivujte prosím svůj účet."

Všimněte si CreateUserWizard.txt , že šablona e-mailu obsahuje <%VerificationUrl%> zástupný symbol. Sem se umístí adresa URL Verification.aspx stránky. CreateUserWizard automaticky nahradí zástupné symboly <%UserName%> a <%Password%> uživatelským jménem a heslem nového účtu, ale není k dispozici žádný předdefinovaný <%VerificationUrl%> zástupný symbol. Musíme ho ručně nahradit odpovídající ověřovací adresou URL.

Chcete-li toho dosáhnout, vytvořte obslužnou rutinu události pro událost CreateUserWizard SendingMail a přidejte následující kód:

protected void NewUserWizard_SendingMail(object sender, MailMessageEventArgs e)
{
     // Get the UserId of the just-added user
     MembershipUser newUser = Membership.GetUser(NewUserWizard.UserName);

     Guid newUserId = (Guid)newUser.ProviderUserKey;

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

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

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

Událost se SendingMail aktivuje po události CreatedUser , což znamená, že v době, kdy výše uvedená obslužná rutina události spustí, je již vytvořen nový uživatelský účet. K hodnotě nového uživatele UserId můžeme přistupovat voláním Membership.GetUser metody a předáním zadaného UserName do ovládacího prvku CreateUserWizard. Dále se vytvoří ověřovací adresa URL. Příkaz Request.Url.GetLeftPart(UriPartial.Authority) vrátí http://yourserver.com část adresy URL; Request.ApplicationPath vrátí cestu, kde je aplikace kořenem. Ověřovací adresa URL se pak definuje jako Verification.aspx?ID=userId. Tyto dva řetězce jsou pak zřetězeny tak, aby vytvořily úplnou adresu URL. Nakonec text e-mailové zprávy (e.Message.Body) má všechny výskyty <%VerificationUrl%> nahrazené úplnou adresou URL.

Čistým efektem je, že noví uživatelé nejsou schváleni, což znamená, že se nemohou přihlásit k webu. Kromě toho se jim automaticky odešle e-mail s odkazem na ověřovací adresu URL (viz obrázek 6).

Nový uživatel obdrží Email s odkazem na ověřovací adresu URL.

Obrázek 6: Nový uživatel obdrží Email s odkazem na ověřovací adresu URL (kliknutím zobrazíte obrázek v plné velikosti)

Poznámka

Výchozí krok CreateUserWizard ovládacího prvku CreateUserWizard zobrazí zprávu informující uživatele, že jeho účet byl vytvořen, a zobrazí tlačítko Pokračovat. Kliknutím na tuto možnost se uživatel dostane na adresu URL určenou vlastností ovládacího prvku ContinueDestinationPageUrl . CreateUserWizard v je EnhancedCreateUserWizard.aspx nakonfigurovaná tak, aby odesílala nové uživatele do ~/Membership/AdditionalUserInfo.aspx, který uživatele vyzve k zadání jeho domovského města, adresy URL domovské stránky a podpisu. Vzhledem k tomu, že tyto informace můžou přidávat jenom přihlášení uživatelé, je vhodné tuto vlastnost aktualizovat tak, aby se uživatelé vrátili na domovskou stránku webu (~/Default.aspx). Kromě toho by se stránka nebo krok CreateUserWizard měly rozšířit, EnhancedCreateUserWizard.aspx aby uživatele informovaly, že mu byl odeslán ověřovací e-mail a jeho účet nebude aktivován, dokud nedodržuje pokyny v tomto e-mailu. Tyto úpravy nechám jako cvičení pro čtenáře.

Vytvoření ověřovací stránky

Naším posledním úkolem je vytvořit Verification.aspx stránku. Přidejte tuto stránku do kořenové složky a přidružte ji ke Site.master stránce předlohy. Stejně jako u většiny předchozích stránek obsahu přidaných na web odeberte ovládací prvek Obsah, který odkazuje na LoginContent ContentPlaceHolder, aby stránka obsahu používala výchozí obsah stránky předlohy.

Přidejte na Verification.aspx stránku ovládací prvek Label Web, nastavte jeho ID hodnotu StatusMessage a vymažte jeho vlastnost text. Dále vytvořte obslužnou rutinu Page_Load události a přidejte následující kód:

protected void Page_Load(object sender, EventArgs e)
{
     if (string.IsNullOrEmpty(Request.QueryString["ID"]))
          StatusMessage.Text = "The UserId was not included in the querystring...";
     else
     {
          Guid userId;
          try
          {
               userId = new Guid(Request.QueryString["ID"]);
          }

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

          MembershipUser usr = Membership.GetUser(userId);
          if (usr == null)
               StatusMessage.Text = "User account could not be found...";
          else
          {
               // Approve the user
               usr.IsApproved = true;

               Membership.UpdateUser(usr);
               StatusMessage.Text = "Your account has been approved. 
                    Please <a href=\"Login.aspx\">login</a> to the site.";
          }
     }
}

Hromadná část výše uvedeného kódu ověřuje, že UserId řetězec zadaný prostřednictvím řetězce dotazu existuje, že se jedná o platnou Guid hodnotu a že odkazuje na existující uživatelský účet. Pokud všechny tyto kontroly projdou, uživatelský účet je schválen; v opačném případě se zobrazí vhodná stavová zpráva.

Obrázek 7 znázorňuje Verification.aspx stránku při návštěvě v prohlížeči.

Účet nového uživatele je nyní schválen.

Obrázek 7: Účet nového uživatele je nyní schválen (kliknutím zobrazíte obrázek v plné velikosti)

Souhrn

Všechny uživatelské účty členství mají dva stavy, které určují, jestli se uživatel může přihlásit k webu: IsLockedOut a IsApproved. Obě tyto vlastnosti musí být true pro přihlášení uživatele.

Stav uzamčení uživatele se používá jako bezpečnostní opatření ke snížení pravděpodobnosti, že hacker vrazí do webu pomocí metod hrubou silou. Konkrétně platí, že uživatel je uzamčený, pokud v určitém časovém intervalu dojde k určitému počtu neplatných pokusů o přihlášení. Tyto meze lze konfigurovat prostřednictvím nastavení zprostředkovatele členství v Web.confignástroji .

Schválený stav se běžně používá jako způsob, jak zakázat novým uživatelům přihlášení, dokud nedojde k nějaké akci. Web možná vyžaduje, aby nové účty byly nejprve schváleny správcem, nebo, jak jsme viděli v kroku 3, ověřením jejich e-mailové adresy.

Šťastné programování!

O autorovi

Scott Mitchell, autor několika knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Scotta můžete zastihnout na mitchell@4guysfromrolla.com nebo prostřednictvím jeho blogu na http://ScottOnWriting.NETadrese .

Zvláštní díky...

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Chcete si projít moje nadcházející články na WEBU MSDN? Pokud ano, dejte mi čáru na mitchell@4GuysFromRolla.com