2012-04-18 7 views
6

Z gry! framework 2.0, używając Security Trait:wszystko?W grze! 2.0 z cechą bezpieczeństwa w jaki sposób mogę przekierować do oryginalnego adresu URL po zalogowaniu?

Jest podobny wymóg na to pytanie do zabawy! 1.x Playframework's Secure module is not redirecting to the original url after login.

Jednak parametr błysku dla oryginalnego adresu URL nie jest dostępny w wersji 2.0 o ile mogę powiedzieć.

basicaly zmiana szukam byłoby w uwierzytelniać metoda obsługi

def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
     formWithErrors => BadRequest(html.login(formWithErrors)), 
     user => Redirect(routes.Application.index).withSession(Security.username -> user._1) 
    ) 
    } 

Jeżeli jakaś Przekierowanie (originalRequestUrl) byłby przydatny.

Wszelkie pomysły na czyste rozwiązanie?

Odpowiedz

11

Można użyć nagłówka Referer lub jawnie nosić url powrotną w swoim działaniu uwierzytelnienia:

przy użyciu nagłówka

def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors)), 
    user => { 
     val returnUrl = request.headers.get(REFERER).getOrElse(routes.Application.index.url) 
     Redirect(returnUrl).withSession(Security.username -> user._1) 
    } 
} 

przewożących wyraźnie url powrotu

def authenticate(returnUrl: String) = Action { implicit request => 
    loginForm.bindFromRequest.fold(
    errors => BadRequest(html.login(errors, returnUrl)), 
    user => Redirect(returnUrl).withSession(Security.username -> user._1) 
) 
} 
Referer

Korzystając z nagłówka HTTP Referer, s dopóki nie zajmiemy się przypadkiem, w którym przeglądarka nie wypełni tego nagłówka, i poprzez jawny zwrot adresu URL jako parametr waszego działania authenticate, macie więcej możliwości w obsłudze kodu z uwierzytelnianiem ...

Powiązane problemy