Melyik oldal jön be bejelentkezés után?

Az ASP.NET Login vezérlőnek van egy DestinationPageUrl tulajdonsága, amellyel megadhatjuk annak az oldalnak a címét, ahova sikeres bejelentkezés után a vezérlő továbbdob. Ez szép is lenne, már ha működne.

Az esetek nagy részében a Login vezérlőt feldobjuk egy Login.aspx oldalra és a LoginStatus vezérlővel irányítjuk a felhasználót erre az oldalra. A LoginStatus azonban nem egyszerűen a Login.aspx URL-t adja meg az átirányítás céljaként, hanem utánafűz egy ?ReturnUrl= kezdetű query stringet. Ha a Login vezérlő talál ReturnUrl-t a query stringben, akkor annak az értéke elsőbbséget élvez a DestinationPageUrl tulajdonsággal szemben és az ott megadott oldalra jut a felhasználó sikeres bejelentkezés után.

A kérdés már csak az, hogy mi van akkor, ha szeretném felülbírálni a LoginStatus okoskodását – például URL rewriting miatt – és én szeretném beállítani, hogy melyik oldal jelenjen meg bejelentkezés után? Természetesen a LoginStatus vezérlőnek nincs ilyen tulajdonsága...

Némi Reflectorozás után rájöhetünk, hogy az internal FormsAuthentication.GetReturnUrl metódus felelős a visszatérési cím összeállításáért. Ez először megnézi, hogy van-e ReturnUrl a query stringben és ha nincs (miért is lenne??), akkor még megnézi a Request.Form gyűjteményben is. Nincs más dolgunk, mint biztosítani azt, hogy a Formban legyen ilyen érték, amit legegyszerűbben úgy tehetünk meg, hogy létrehozunk az oldalra egy ilyen nevű rejtett mezőt – fontos, hogy a name attribútuma ReturnUrl legyen.

Ez sem olyan egyszerű, mint gondolnánk:

  1. A HiddenField vezérlőnek nincs Name tulajdonsága, sőt Attributes sincs :(
  2. A HtmlInputHidden vezérlőnek van Name tulajdonsága, de az ID alapján automatikusan kap értéket :(
  3. Marad a HtmlGenericControl:
  HtmlGenericControl c = new HtmlGenericControl();
  c.TagName = "input";
  c.Attributes[ "name" ] = "ReturnUrl";
  c.Attributes[ "type" ] = "hidden";
  c.Attributes[ "value" ] = myUrl;            
  this.Form.Controls.Add( c );

Ha ezt a kódot betesszük az oldalon a Page_Loadba, akkor a LoginStatus a ReturnUrl query string megépítésénél a myUrl értékét fogja használni, a Login vezérlő pedig oda fogja irányítani a felhasználót bejelentkezés után.



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2009.07.27. 7:08:49 | Permalink | Hozzászólások: 0 | Tárgyszavak: ,


  • Server Core előadás

    Oláh István 2008. november 11.-én a Sugárban volt egy Windows Server 2008-cal foglalkozó Informatika Tisztán rendezvény. Tartottam ott egy, a Windows Server Core-ral foglakozó előadást… Tovább »
  • Az IE 6-nak mennie kell

    Balássy György (MS RD, ASP.NET MVP, MCTS) Biztos sokakhoz már eljutott a hír, megjelent az Internet Explorer 8, ingyenesen letölthető, telepíthető, telepítendő! Én a béta 1 változattól kezdve használom és bevallom semmi problémám nem volt vele. Ha egy webhely nem támogatta, a Compatibility View segítségével akkor is tökéletesen lehetett használni az oldalt. Merem ajánlani. A korábbi verzióknak, különösen az IE 6-nak immár mennie kell! Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások