Odemykání a schvalování uživatelských účtů (C#)
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.
Přidání odkazů "Spravovat" doUserAccounts
GridView
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
.
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řídaMembershipUser
má IsLockedOut
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 UpdateUser
a 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.aspx
Vytvoř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
naUserNameLabel
a vymažte jehoText
vlastnost. - Ovládací prvek CheckBox s názvem
IsApproved
. Nastavte jehoAutoPostBack
vlastnost natrue
. - Ovládací prvek Popisek pro zobrazení data posledního uzamčení uživatele. Pojmenujte tento popisek
LastLockedOutDateLabel
a vymažte jehoText
vlastnost. - Tlačítko pro odemknutí uživatele. Pojmenujte toto tlačítko
UnlockUserButton
a nastavte jehoText
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 jehoText
vlastnost a nastavte jehoCssClass
vlastnost naImportant
.Important
( Třída CSS je definovánaStyles.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.
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 LastLockoutDate
DateTime
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í SqlMembershipProvider
aspnet_Membership
nového účtu nastaví pole tabulky LastLockoutDate
na 1754-01-01 12:00:00 AM
hodnotu . 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.aspx
adresu 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.aspx
Testová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.
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ý.
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.
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, DisableCreatedUser
true
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).
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.
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.config
ná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