MC, 11:34 wtorek, 13.08.2013 r.
Spróbujmy w tym artykule poruszyć temat obsługi adresu powrotnego ReturnUrl, dostarczanego przez Membership Provider-a w aplikacjach webowych tworzonych przy pomocy .NET.
W czym rzecz?
Już kiedyś pisałem o tym
jak zalogować i wylogować użytkownika przy pomocy Membership Provider-a. Rzecz jednak w tym, że zastosowanie metody:
FormsAuthentication.SetAuthCookie()
nie obsługuje przekierowania na adres powrotny ReturnUrl, jaki jest dołączany do adresu strony, podczas gdy użytkownik usiłuje odwiedzić stronę, do jakiej nie ma uprawnień (czyli np. nie jest jeszcze zalogowany). Co więc jeśli chcemy dać możliwość przekierowania użytkownika na adres, który chciał odwiedzić, po tym jak już zostanie zalogowany? Błędem byłaby próba ręcznej obsługi parametru ReturnUrl i to z dwóch powodów. Po pierwsze, istnieje ryzyko że nie zrobimy tego w sposób w pełni bezpieczny dla naszej aplikacji internetowej, a dwa, że nie ma najmniejszej potrzeby implementować ten funkcjonalności od zera, ponieważ ona jest już dostarczona w pakiecie!
Jak przekierować na adres powrotny ReturnUrl?
Przyznam, że sam do niedawna żyłem w nieświadomości istnienia metody:
FormsAuthentication.RedirectFromLoginPage()
A wielka szkoda, ponieważ działa ona zupełnie podobnie do wspomnianej w poprzednim akapicie SetAuthCookie, pozwalając na zalogowanie użytkownika, a przy tym zapewnia ona interesującą nas funkcjonalność przekierowania! Przy czym należy wiedzieć, że jeśli do adresu nie jest dołączony parametr ReturnUrl, to przekierowanie nastąpi na stronę domyślną zdefiniowaną w konfiguracji aplikacji:
<authentication mode="Forms">
<forms
...
defaultUrl="/Members/Default.aspx" />
</authentication>
Problem może się pojawić, gdybyśmy zechcieli stworzyć różne przekierowania domyślne, dla poszczególnych Ról użytkowników, wtedy już trzeba nieco więcej własnej implementacji kodu. Mimo wszystko warto wiedzieć o istnieniu funkcji RedirectFromLoginPage i jej działaniu zapewniającym obsługę ReturnUrl.
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!