2012-10-02 2 views
3

사용자가 로그인하여 다양한 페이지를 볼 수있는 레일 앱을 만들고 있습니다. 일부는 비공개이고 다른 일부는 공개입니다. 사용자가 개인 페이지를 보는 동안 로그 아웃하면 root_path로 리디렉션되어야합니다. 공개 페이지를 보는 동안 사용자가 로그 아웃하면 동일한 페이지로 리디렉션되어야합니다 (로그 아웃되면 이제 약간 다르게 렌더링 됨).레일스 앱에서 Devise를 사용하여 조건부 사인 아웃

내 application_controller 내의 after_sign_out_path_for (resource_or_scope) 메소드에서 조건문을 사용하여이 작업을 수행하려고합니다. 문제는 일반적으로 pages_controller 파일에서 액세스되는 @page 변수가이 범위에서 사용할 수 없거나 사용할 수 없다는 것입니다. 다른 컨트롤러에서이 변수 (마지막로드 된 페이지)에 액세스하는 가장 좋은 방법은 무엇이며 세션이 삭제 된 후에는 어떻게해야합니까?

감사합니다.

+0

추가 질문 : resource_or_scope 매개 변수를 사용하는 방법으로 페이지에 대한 참조를 전달할 수있는 방법이 있습니까? – Andrew

답변

1

세션 변수의 마지막 페이지를 추적하고 필터 앞에 추가하여 페이지 컨트롤러에서 최신 상태로 유지할 수 있습니다.

session[:last_page_visited] = @page 

당신은 또한 당신에게 그들이에서 로그 아웃 페이지의 URL을 줄 것이다 request.referrer에 액세스 할 수 있습니다. 확실하지 않은 경우 개인/공공, 어쩌면 정규식을 사용하여 확인할 수 있습니까?

+0

고마워요! 사용자가 로그 아웃 한 후에 세션이 파괴되기 때문에 일부 정규식과 함께 request.referrer를 사용하여 종료되었습니다. – Andrew

관련 문제