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.

Technorati-címkék: ,,

2 thoughts on “Melyik oldal jön be bejelentkezés után?

  1. Miskolczi

    Én így szoktam: protected void Login1_OnLoggedIn(object sender, EventArgs e) { Response.Redirect("WebPages\\index.aspx"); }Morzel

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s