Úvodní pohled na membership provider
Pomalu se dostáváme k providerům, které můžeme sice použít samostatně, ale při jejich použít je budeme většinou využívat společně. Jedná se o Membership, který si představíme nyní, tak také Role a Profile provider, na které přijde řada v nejbližší možné době.
Membership provider použijeme v okamžiku, kdy chceme spravovat uživatele naší aplikace, pokud chceme zajistit vytvoření uživatelského účtu, změnu hesla nebo jeho obnovení, můžeme si vynutit použití kontrolní otázky. Dále pak slouží k validaci uživatelského jména a přístupového hesla uživatele, který přistupuje do aplikace, a nesmíme zapomenout na to, že k danému uživateli můžeme sledovat další dodatečné informace jako je email adresa a další.
Jak už jsem se zmínil v prvním odstavci, membership provider budeme většinou používat ve spojitosti s role providerem. Neboť membership umožňuje pouze authentikaci uživatele, nikoli však už jeho autorizaci, tj. zajištění oprávnění ke zdrojům. Na toto nesmíme zapomenout při vytváření naší aplikace.
Co se týká vestavěné podpory v .NET Frameworku, tak ta obsahuje pouze dvě implementaci membership provideru a to Active directory a SqlMembership provider. Nesmíme ovšem zapomenout na to, že pro to, abychom mohli založit a spravovat uživatele, stejně jako dovolit uživatelům se přihlásit k naší aplikaci potřebujeme nějaké vizuální prvky, a těch máme k dispozici hned několik.
Uživatelské prvky využívající membership provider
- Login - poskytuje základní prvky pro přihlášení uživatele, jako je uživatelské jméno a heslo, plus můžeme přidat zaškrtávací pole pro zapamatování (trvalé přihlášení) si uživatele
- LoginView - představuje jednoduchý prvek, který má dva stavy, které zobrazuje na základě toho, zda je uživatel přihlášen, nebo naší aplikaci používá anonymní uživatel
- LoginStatus - zobrazuje stav, ve kterém je uživatel a nabízí dvě možnosti, přihlásit nebo odhlásit
- LoginName - zobrazuje jméno přihlášeného uživatele
- PasswordRecovery - je prvek, který umožňuje uživateli zaslat, nebo spíše vygenerovat a odeslat na email nové heslo pro přístup do aplikace
- CreateUserWizard - je komplexnější prvek, který umožní založení nového uživatele. Samozřejmě si tento prvek můžete přizpůsobit aby odpovídal vzhledu vaší aplikace
- ChangePassword - umožňuje uživateli změnit si heslo.
Velice zajímavý prvek je CreateUserWizard, který umožňuje založit nového uživatele pro naši aplikaci. Tento prvek může být velice snadno upravitelný a můžeme jej rozšířit o další možnosti. Za tímto účelem můžeme definovat tento prvek jako průvodce vytvořením uživatelského účtu a přidat si kroky, kterými musí uživatel projít předtím, než jeho účet bude vytvořen. Zbývá nám ovšem ještě základní pohled na kterém je zobrazeno několik vstupních textových polí, pro které nenajdeme vlastnosti, jak je skrýt nebo jakkoli jinak nastavit. To nás ovšem nesmí zmást, protože několik vlastností je součástí Membership provideru a některé implementace nemusí mít dané vlastnosti funkční. Proto není možné je nastavovat na kontrolu, ale jejich nastavení se přebírá z právě aktivního provideru. Patří mezi ně vlastnosti requiresQuestionAndAnswer, minRequiredPasswordLength, minRequiredNonalphanumericCharacters nebo passwordStrengthRegularExpression. Obzvláště si dejte pozor na dvě prostřední, které mohou uživateli z(ne)příjemnit jeho přihlašování.
Určitě nastanou také situace, kdy budeme chtít vědět o uživateli více než jen jeho uživatelské jméno, a tak nás bude zajímat třída MembershipUser. Jakmile dostaneme data pomocí providera, např. pomocí statické metody Membership.GetUser(string userName), můžeme tyto informace zobrazit, nebo s nimi jinak naložit v naší aplikaci.
Web Site Administration Tool
Bez velké námahy můžeme vložením několika prvků na stránku zajistit celkem komplexní funkcionalitu správy uživatelů, ovšem co v situaci, kdy jsme administrátorem a potřebujeme nastavovat nejen uživatele, ale i jejich přiřazování do rolí a vlastně nejen do rolí, ale i správu dalších vlastností, které je možné konfigurovat? Teď si jistě říkáte, ale co s tím, teď jsme založili uživatele, role mě zatím nezajímají a o ostatních nastaveních, to není předmět tohoto webu. Ale přeci jen, Web site administration tool je mocným nástrojem, který nám umožní nastavit vše potřebné na jednom místě a to ať už se jedná o správu uživatelů, správu rolí a přístup k jednotlivým složkám webu, konfigurační hodnoty AppSettings, nastavení použitých providerů nebo nastavení SMTP serveru. Stejně tak jako nám dovolí nastavit trasování aplikace a chybové stránky nebo uvést aplikaci do stavu OffLine.
Jak je z popisu poznat, tento nástroj dává k dispozici komplexní nastavení aplikace a Vám nezbývá nic jiného, než k němu přistoupit a začít konfigurovat a hrát si s nastavením.
Co dodat
Uživatele umíme založit aniž bychom napsali řádek kódu, dokážeme uživateli nabídnout přihlašovací dialog a zobrazit mu jeho status, zda je přihlášen, nebo se může odhlásit. Ale metod, které můžeme použít se statickou třídou Membership je více a asi nemá význam, je zde po jedné rozebírat. Pokud budete chtít vědět více, určitě napiště do komentáře.
Jedny z mála řádků, které budeme muset dopsat do našeho kódu, jsou řádky pro autentikaci uživatele a jeho přihlášení pomocí Login prvku. A kolik je těch řádků? Samozřejmě co nejmíň, musíme se přeci soustředit na jiné věci, které má naše aplikace splňovat a ne si hrát s nastavováním uživatelů. Takže, tady jsou ty potřebné řádky (login představuje Login kontrol):
if (Membership.ValidateUser(login.UserName, login.Password)) FormsAuthentication.RedirectFromLoginPage(login.UserName, login.RememberMeSet);
4 Comments
Martin said
<p>Ahoj dělám teď, na vlastním MembershipProvideru a potřeboval bych vědět jakým způsobem můžu přidat uživateli další informace jako prijmeni,jmeno, atd. a ne jen ty základní co jsou jako parametry metody createUser. Díky za vaše rady</p>
Petr said
<p>Martin: řešením bude pravděpodobně využít nebo si udělat Profile provider, ne?</p>
Petr said
Záleží na tom co myslíš tím vlastním MembershipProviderem , můžeš použít ty profily , ale podle mě je mnohem lepší si vytvořit vlastní např. myMembershipProvider a dědit od MembershiProvider , a pak si ovládáš kompletně vše co potřebuješ přímo na míru svým požadavkům a s profilama se nemusíš zabývat.
Sebastian said
Dobrý den,
prosím Vás, mohl byste rozepsat (nebo alespoň nástřel) jak na vlastního Membership providera?