2012-04-18 25 views
6

Với Play! framework 2.0, sử dụng Security Trait:Khi chơi! 2.0 với đặc điểm bảo mật làm cách nào để chuyển hướng đến URL ban đầu sau khi đăng nhập?

Nếu tôi cho phép người dùng duyệt đến một số phần của trang web chưa được xác thực, nhưng trên một số hành động họ cần xác thực, làm cách nào để chuyển hướng họ đến url ban đầu của họ trước khi xác thực và không cùng url tất cả các?

Yêu cầu tương tự đối với câu hỏi này dành cho Play! 1.x Playframework's Secure module is not redirecting to the original url after login.

Tuy nhiên, tham số flash cho url ban đầu không khả dụng ở mức 2.0 như tôi có thể biết.

về cơ bản sự thay đổi Tôi đang tìm kiếm sẽ được trong xác thực phương pháp xử lý

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

Trường hợp một số loại Redirect (originalRequestUrl) sẽ được thuận tiện.

Bất kỳ ý tưởng nào về giải pháp sạch sẽ?

Trả lời

11

Bạn có thể sử dụng Referer tiêu đề, hoặc một cách rõ ràng mang url trở trong hành động xác thực của bạn:

Sử dụng Referer tiêu đề

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) 
    } 
} 

Thực hiện một cách rõ ràng url trở

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

Bằng cách sử dụng tiêu đề HTTP Referer bạn s cho đến khi phải xử lý trường hợp trình duyệt không điền vào tiêu đề này và bằng cách thực hiện rõ ràng url trả về dưới dạng tham số của hành động authenticate của bạn, bạn có thể có thêm bản mẫu trong quá trình xử lý mã với xác thực…

Các vấn đề liên quan