2016-08-25 3 views
0

http://example.com에 액세스하면 먼저 로그인 페이지로 이동하고 로그인에 성공한 후 홈 페이지로 이동합니다. 로그인이 성공한 후 http://example.com/myusers에 액세스하면 홈 페이지가 아닌 myusers 페이지로 리디렉션되고 싶습니다.Rails Devise : 로그인 후 사용자를 리디렉션하는 방법

몇 가지 온라인 게시물을 읽은 후, 내 application_controller.rb에서 after_sign_in_path_for 메소드를 조작 할 수 있다는 것을 알았습니다. 나는이 방법에 특정 URL을 추가하여이를 테스트했으며 성공적인 로그인 후에는 항상 해당 URL로 리디렉션됩니다.

def after_sign_in_path_for(resource) 
    "http://example.com/users"  
end 
나는이 방법은 로그인 전에 사용자가 요청한 URL을 포착하고 그에 따라 사용자를 리디렉션 할 수있는 방법

?

답변

2

고안이 아웃 - 오브 - 박스 같은 것을 함께 제공됩니다. 실패 시나리오의 일부로 마지막 요청을 저장합니다. 이 "방법"을 사용하면 솔루션에 도움이됩니다. 당신이 컨트롤러 (들) 귀하의 before_filter이 메소드를 호출 할 필요가 있습니다 : 공유를위한

before_filter: authenticate_user! 

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update#a-simpler-solution

+0

감사합니다! 고의가 이미 이것을했는지 몰랐다. 굉장해! – codyeatworld

+0

"How-To"-Section은 실제로 꽤 좋습니다. 훌륭한 것들과 예제가 많이 있습니다. – Mathias

1

요청 된 URL을 세션 변수에 저장할 수 있습니다.

session[:return_to] = request.original_url 

당신은 당신의 응용 프로그램 컨트롤러에 before_action :authorize 방법의 내부 세션 변수를 설정할 수 있습니다,이 권한 부여 전략에 따라 다른 곳에서 의미가있다.

def authorize 
    if current_user_authorized? 
    # Authorized... 
    else 
    # Record the requested page URL and redirect to the login page. 
    session[:return_to] = request.original_url 
    redirect_to login_url, error: "Not authorized." 
    end 
end 

당신이 쓸 수있는이 기능을 사용하려면

def after_sign_in_path_for(resource) 
    session[:return_to] || root_url 
end 
관련 문제