HyperLink


Bejelentkezés
E-mail: 
Jelszó: 






Skip Navigation Links
 

Bejelentkezés kezelése saját kontrol készítésével


Felhasználói azonosítás 2. rész

Példaprogram letöltése

28256 bájt

Képzeljünk el egy web site-ot, melynél az oldalak egy részét bárki, egy másik részét csak a bejelentkezett felhasználók láthatják. Ekkor célszerű minden oldalon lehetőséget biztosítani arra, hogy a felhasználó bejelentkezhessen, illetve ha ez már megtörtént, akkor ennek tényét jelezhessük. Ekkor minden web oldalra ugyanazt a kódot kellene beilleszteni, ami nyilván csak úgy valósítható meg, hogy készítünk egy saját kontrolt, mely elvégzi ezeket a feladatokat. Ettől kezdve már egyszerű a helyzetünk: bármely web lapra csak el kell helyeznünk ezt a kontrolt és a bejelentkezéssel már nem is kell foglalkoznunk azon az oldalon.

Az új kontrol megvalósításánál figyelembe kell vennünk két esetet:
  • A felhasználó még nem jelentkezett be. Ekkor biztosítani kell a lehetőséget a bejelentkezésre és a megadott adatokat ellenőriznünk kell.
  • A felhasználó már bejelentkezett. Ekkor célszerű megjelenítenünk, hogy ki is az azonosított felhasználó, illetve lehetőséget kell biztosítanunk a kijelentkezésre.
Látható, hogy a két eset merőben eltérő HTML kódot és vezérlőket igényel. Akkor hát hogyan is hozzuk létre az új kontrolt, mikor annak tartalma és a hozzá rendelt kód is más és más lesz a bejelentkezés tényétől függően?
A megoldáshoz egy apró trükköt használunk: valójában nem két új kontrolt készítünk, hanem hármat. Az elsőt akkor használjuk, ha még nincs bejelentkezve a felhasználó, a másodikat akkor, ha már be van. A harmadik vezérlő pedig attól függően teszi láthatóvá, illetve rejti el ezt a két vezérlőt, hogy a bejelentkezés megtörtént-e vagy sem.
Nézzük sorban:
Login.ascx
Itt kerül megvalósításra a bejelentkezést elvégző felhasználói kontrol. Ehhez nyilván szükséges két TextBox, melybe a felhasználói név és a jelszó kerül megadásra, valamint egy gomb a bejelentkezés elvégzésére.
Amikor tehát a felhasználó erre a gombra kattint, akkor kell ellenőriznie rendszerünknek, hogy a megadott névvel és jelszóval a bejelentkezés érvényes-e vagy sem.
    private void Button1_Click(object sender, System.EventArgs e)
    {
A példa egyszerűségének kedvéért most csak a software bejelentkező nevet és az online jelszót fogadjuk el.
      if (TextBox1.Text=="software" && TextBox2.Text=="online")
      {
Ha ez lett megadva, akkor a bejelentkezést érvényesnek tekintjük. Ekkor ketté kell ágaztatnunk a programunk futását, attól függetlenül, hogy mindkét esetben a bejelentkezést sikeresnek tekintjük. Ennek okára a későbbiekben visszatérünk.
        if (Page.Request.Url.ToString().IndexOf("Login.aspx")==-1)
        {
          FormsAuthentication.SetAuthCookie(TextBox1.Text, false);      
          Page.Response.Redirect(Page.Request.Url.ToString());
        }
        else
        {
          FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);      
        }
      }
Ha a megadott adat helytelen, akkor a bejelentkezés sikertelen. Ez esetben megjelenítjük a Label3-at, mely tartalmazza a felhasználónak szánt hibaüzenetet. Mivel másról nem rendelkezünk, így a bejelentkezés nem történik meg és maradunk azon a web oldalon, melyről a felhasználó megpróbált bejelentkezni.
      else
      {
        Label3.Visible=true;
      }
    }
Logged.ascx
Ebben a kontrolban lesz megvalósítva annak jelzése, hogy ki is a bejelentkezett felhasználó. Ehhez egy Label-re lesz szükségünk.
    private void Page_Load(object sender, System.EventArgs e)
    {   
      if (Page.User.Identity.IsAuthenticated)
      {
        Label1.Text=Page.User.Identity.Name;
      }
    }
Ezen kívül elhelyezünk még egy gombot is, melyre ha rákattint a felhasználó, akkor megtörténik a kijelentkeztetése.
Kijelentkezés után az alapértelmezett oldalra irányítjuk a felhasználót. Ez fontos lépés, mert lehet, hogy pont egy olyan oldalon áll, amelyet csak bejelentkezett felhasználók láthatnak.
    private void Button1_Click(object sender, System.EventArgs e)
    {
      FormsAuthentication.SignOut();    
      Response.Redirect(Request.ApplicationPath+"/Default.aspx");
    }
ManageLogin.ascx
A ManageLogin kontrol lesz az az új kontrol, mely kezeli a két előbbit. Ennek függvényében mind a kettőből felteszünk egyet-egyet a ManageLogin-ra egy-egy Panel kontrolra. Most egymás mellé kerül egy Login1 és egy Logged1 nevű kontrol. Mind a két Panel-nél a Visible property-t hamisra állítjuk.
Most már csak azt kell figyelni, hogy van-e bejelentkezett felhasználó és ennek függvényében kell hol az egyiket, hol a másikat láthatóvá tenni.
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (Page.User.Identity.IsAuthenticated)
      {
        Panel2.Visible=true;
      }
      else
      {
        Panel1.Visible=true;
      }
    }
Mivel mind a két kontrol egyforma méretű és mindig csak az egyik lesz látható belőlük, így a web oldalunk tervezésénél már előre figyelembe vehetjük ennek a kontrolnak a szükséges helyigényét.
A felhasználás
A bejelentkezési kontrol ezzel elkészült. Most már web site-unk bármelyik oldalára elhelyezhetjük a ManageLogin kontrolt, mely mindig a megfelelő HTML kódot fogja eredményezni attól függően, hogy megtörtént-e a bejelentkezés vagy sem.
A mellékelt példában a Defaul.aspx lapon több linket is elhelyeztünk. Az 1. oldal, illetve a 2. oldal nevű link egy-egy olyan lapra mutat, melyet bárki, bejelentkezés nélkül is láthat.
A 1. titok, illetve a 2. titok linkek olyan oldalakra mutatnak, melyeket csak azonosított felhasználók láthatnak. Hogy miként értük el ezt, arról részletesen sorozatunk első részében már volt szó.
Az alkalmazásunk helyes működésének érdekében még egy feladatra fel kell készítenünk azt. Előfordulhat egy olyan eset is, amikor a felhasználó egy olyan linket választ mely csak bejelentkezés után látható, de még nem jelentkezett be. Ekkor szükséges egy olyan oldalra történő irányítása, ahol erre felhívhatjuk a figyelmét és természetesen a bejelentkezést is elvégezheti, majd ha ezt sikeresen megtette, akkor automatikusan az általa kívánt oldalra irányíthatjuk. Ez az oldal lesz a Login.aspx.
Login.aspx
Mivel a bejelentkezés itt is ugyanúgy kell, hogy megtörténjen, mint bármely más lapon, így nyugodtan használhatjuk itt is a ManageLogin kontrolunkat. A web oldalt csak annyival kell kiegészítenünk, hogy felhívjuk a felhasználó figyelmét arra, hogy csak bejelentkezés után érheti el a kívánt oldalt.
Tegyük a következőt: ne legyünk bejelentkezve és kattintsunk mondjuk a 2. titok linkre a Default.aspx lapon. Ekkor hiba történik, mert ez a lap csak azonosított felhasználók számára hozzáférhető. Ekkor automatikusan a Login.aspx lapra kerülünk, ahol elvégezhetjük a bejelentkezést. Ha ez sikeres volt, akkor biztosítanunk kell, hogy a felhasználó automatikusan a 2. titok lapra kerüljön. Igen ám, de a bejelentkezési procedúrát a Logix.ascx kontrolunk végzi el és nem a Login.aspx lap. Ezért is van az, amire már utaltunk, hogy a Login.ascx kontrolban a sikeres bejelentkezés után is ketté kell ágaztatnunk a programot.
Az első ág akkor fut, ha nem a Login.aspx lapon van a felhasználó, hanem bármely más lapon ahol elvégezte a bejelentkezést.
        if (Page.Request.Url.ToString().IndexOf("Login.aspx")==-1)
        {
Ekkor rendelkezünk arról, hogy ki is a bejelentkezett felhasználó, valamint arról, hogy ne tárolódjon cookie a felhasználó gépén.
          FormsAuthentication.SetAuthCookie(TextBox1.Text, false);      
Végül ugyanarra a lapra kell visszairányítanunk a felhasználót ahol volt is, hiszen a bejelentkezi ablak bármely web lapunkon lehet.
          Page.Response.Redirect(Page.Request.Url.ToString());
        }
Azonban ha a felhasználó a Login.aspx lapon jelentkezik be, akkor tudhatjuk, hogy azért került ide, mert egy olyan web oldalt akart elérni, amelyre névtelenül nem volt joga. Ekkor a sikeres bejelentkezés után nem lenne megfelelő, ha ugyanarra az oldalra irányítanánk, mint az előbbi megoldásban. Ilyenkor a RedirectFromLoginPage függvényt kell használnunk, mely képes arra az oldalra irányítani őt, amelyet eredetileg is szeretett volna elérni.
        else
        {
          FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, false);      
        }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 357. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2010 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |