2013-05-08 1 views
1

레일 3을 사용하고 있습니다. 내 전체 앱은 Devise 2.2를 사용하는 등록 된 사용자로 제한됩니다.Devise를 통해 가입 한 사용자로부터 요청한 URL을 수집하는 방법

내 요구 사항 : "사용자가 구독했을 때 항목 X를 (원하는 항목/: ID가 요청 된 URL과 같음) 표시하려고했습니다."라고 말할 수 있습니다. 가능할 때마다 사용자가 등록 할 때보고 싶은 앱의 항목을 알려줍니다.

예 : John은 www.website/item/48 링크를 클릭하지만 그는 시스템에 등록되지 않았습니다. 장치가 로그인 페이지로 리디렉션 된 후 그는 등록되어 www.website/item/48로 리디렉션되었습니다 (표준 작성 동작). 나중에 사이트의 관리자는 그가 48

는 현재 고안 항목 내 모든 컨트롤러에 before_filter :authenticate_user!으로, 가장 고전적인 방법을 설정보고 싶었 기 때문에 계정을 만들지 [email protected] 해당 사용자를 볼 수 있습니다 . 로그인/가입 페이지는 디자인을 제외하고 기본값과 비슷합니다.

class RegistrationsController < Devise::RegistrationsController 

    def new 
    super 
    logger.debug"--------------------------------" 
    logger.debug session.inspect 
    logger.debug params.inspect 
    logger.debug resource 
    logger.debug"--------------------------------" 
    end 

    def create 
    super 
    logger.debug"-----------------------------------" 
    logger.debug session.inspect 
    logger.debug params.inspect 
    logger.debug resource.inspect 
    logger.debug"-----------------------------" 
    end 
end 

내가 고안에서 요청 된 URL을하는 방법에 대한 단서가 없다 :

나는 유증의 기본 등록 컨트롤러를 overided있다. 나는 새로운 액션 동안 세션 변수에서 그것을 볼 수 있지만, 한번은 그것을 찾을 수 없다.

Devise의 생성 작업에서 요청한 URL을 가져 와서 저장할 수 있습니까?

답변

1

는이처럼 등록 컨트롤러에 sign_up 메소드를 오버라이드 (override) shoulde : 당신이 다른 방법에 저장하려는 경우는 물론 logger.debug을 변경할 수 있습니다

def sign_up(resource_name, resource) 
    scope = Devise::Mapping.find_scope!(resource)) 
    path = session["#{scope}_return_to"] || signed_in_root_path(scope) 
    logger.debug("Requested path before sign up: #{path}") 
    sign_in(resource_name, resource) 
end 

. 중요한 부분은 session["#{scope}_return_to"] || signed_in_root_path(scope)입니다.

이것은 after_sign_up_path_for(resource)과 동일하지만 세션의 리퍼러 경로는 삭제하지 않습니다.

+1

그것은 내가 원하는 일을하지만 분명히, 그것은 세션에서 # {범위} _return_to을 읽는 것하고 즉시 삭제. 나는 가입 후에 URL을 얻거나 사용자가 원래 URL로 리다이렉트시키지 않도록한다. 나는 둘 다 필요하며 그 위에, 나는 다른 종류의 사용자를 사용할 것이기 때문에 완벽하게 작동하는 장치가 필요하다. : 그러나 당신의 대답은 올바른 길로 가고있다. 내가 업데이트 할 것이다. – Syl

+0

나는 대답 : – jokklan

2

오른쪽, 당신은 sign_up 방법을 무시하고 다음 코드를 사용하여 해당 URL을 얻을 수 있습니다 :

def sign_up(resource_name, resource) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    url = session["#{scope}_return_to"] # here is your url 

    super 
end 
+0

왜 생성보다는 sign_up에서 더 나은가? – Syl

+1

글쎄, 내가 할 수있는 일은 할 일이라고 생각한다. 그것은 return_to url을 얻는 한 예입니다 :) –

관련 문제