2017-12-16 8 views
0

Ruby on Rails, Devise를 인증에 사용. Devise는 기본적으로 딥 링크를 포함하고 있지만 사용자가 먼저 인증을 받아야하는 URL로 이동해야합니다.쿼리 문자열 반환 값 URL로 쿼리 문자열 매개 변수

이 사용 사례는 내 요구 사항을 충족하지 않으며 사용자가 로그인 한 후 현재 페이지로 리디렉션되도록 쿼리 문자열 매개 변수를 제공하는 옵션이 있는지 궁금합니다. 로그인하면 페이지가 필요하지만 필수는 아닙니다.

답변

1

필요에 맞게 Devise::SessionsController을 확장 할 수 있습니다. 당신이 source code 보면, 유증은 성공적인 로그인 후 특정 경로로 사용자를 리디렉션 after_sign_in_path_for를 사용합니다.

당신이 가지고있는 자원이 routes.rb에서는 User

입니다 가정 사용해야하는 라우터 고안 지정 :

devise_for :users, controllers: {sessions: 'sessions'} 

그런 다음 Devise::SessionsController에서 상속 app/controllers/sessions_controller의 컨트롤러를 생성하고 after_sign_in_path_for 오버라이드 (override) :

class SessionsController < Devise::SessionsController 

    protected 

    def after_sign_in_path_for(resource)   
    params[:redirect_path].presence || stored_location_for(resource) 
    end 
end 
새 세션 양식 ( app/views/devise/sessions/new.html.erb)에서

는 컨트롤러에 redirect_path PARAM을 중계하는 숨겨진 태그를 추가

<%= hidden_field_tag :redirect_path, params[:redirect_path].presence %> 

이제 사용자가 방문 new_user_session_path(redirect_path: some_path)는, 그들은 후 원하는 경로로 리디렉션 할 필요가있는 경우 성공적인 로그인.