2010-01-10 3 views
4

Authlogic으로 세션을 만들 때 쿠키 도메인을 현재 도메인 이외의 다른 도메인으로 설정할 수 있습니까?세션 생성시 Authlogic에 쿠키 도메인 지정

새로운 계정이 우리의 가입 도메인을 만들 때, 나는 그들의 하위 도메인 계정에 사용자를 리디렉션에서 사용자를 로그인하고 싶습니다

현재 컨트롤러 :.

def create 
    @account = Account.new(params[:account]) 
    if @account.save 
    @user_session = @account.user_sessions.create(@account.users.first) 
    # I'd like the cookie domain to be [@account.subdomain, APP_CONFIG[:domain]].join(".") 
    redirect_to admin_root_url(:host => [@account.subdomain, APP_CONFIG[:domain]].join(".")) 
    else 
    render 'new' 
    end 
end 

답변

4

당신이 할 경우 당신은 모두가 하위 도메인의 모든 하위 도메인에 로그인해야 할 수 있습니다

당신의 production.rb 파일에

config.action_controller.session[:domain] = '.YOURDOMAIN.COM'

. 그런 다음 컨트롤러를 추가하기 전에 누군가가 실제로 올바른 도메인을 사용하고 있는지 확인하는 필터 (또는 무엇이든 상관 없지만 필자는 작동한다는 것을 알기 위해 필터를 사용)를 사용하면 꽤 잘 작동합니다.

예를 들어 세션의 적절한 하위 도메인을 세션 변수로 저장하고 기본 도메인에 있거나 다른 사람의 하위 도메인에있는 페이지를 볼 경우 특정 옵션에 사람들에게 링크 옵션을 제공 할 수 있습니다.

이것은 일종의 일을하는 일반적인 패턴 인 것 같습니다. 하위 도메인과 관련된 쿠키를 설정하면 기본 사이트에 로그인 한 시간을 알 수 없습니다. 또한 'users_domain?'도우미가 있는데이 작업을 수행 할 때 가끔씩 뷰에서 호출되기도합니다.

이러한 종류의 일반적인 웹 디자인 패턴을 원하지 않는다면 wesgarrion의 하위 도메인에서의 세션 생성은 한 가지 방법입니다. 나는 이것을 디자인/상호 작용/코드 문제로 언급 할 것이라고 생각했습니다.

0

당신이 원하는 경우를 하위 도메인에 로그인하려면 Authlogic의 단일 사용 토큰을 사용할 수 있습니다.

단일 사용 토큰으로 로그인하는 예는 Params module을 확인하십시오.

당연히 귀하의 작업은 로그인하여 하위 도메인에 세션을 생성하므로 다음 요청을 위해 다시 인증 할 필요가 없습니다. 이

process_cgi()session()의 쿠키에 대한 도메인을 설정하는 옵션입니다,하지만 난 Authlogic에 당 요청들을 설정하는 방법을 볼 수 없습니다. authlogic 메일 링리스트는 꽤 반응 적이지만, 이것은 꽤나 표준적인 유스 케이스처럼 보입니다. 누군가가 시도해 보았을 것입니다. 그리고 어, Google 그룹에 귀하의 메모를 보았으므로 신경 쓰지 마십시오.

+0

single_access_token은 지속 요청 세션 용으로 설계되지 않았으며 단일 요청 (인증, API 액세스 등을 요구하는 피드)을 위해 설계되었습니다. 키를 포함하지 않는 후속 요청에는 세션이 없습니다. – bensie

+0

예. 이 작업을 통해 새 하위 도메인 세션을 만들 수 있습니다. – wesgarrison

0

여러 하위 도메인이있는 응용 프로그램이 있고 그 중 세션 쿠키를 공유하고 싶지 않거나 최악의 경우 - 동일한 세션 키가있는 최상위 .domain 세션 쿠키가 하위 도메인 세션 쿠키 (Rails 하나는 보유하고 다른 하나는 던져 버릴 것입니다 - 단순히 요청 헤더의 순서를 기반으로합니다). 디스패처 후크를 사용하여 세션 쿠키를 하위 도메인으로 강제 설정할 수 있습니다.

확장 프로그램의 ActionController에 후크를 포함시킵니다.

base.send :after_dispatch, :force_session_cookies_to_subdomains

은 after_ 파견 후크에 도메인 설정하십시오.우리

@env['rack.session.options'] = @env['rack.session.options'].merge(:domain => 'my_sub_domain' end)

, 우리는 [my_sub_domain]되어야 하는지를 결정하기 위해 @env [HTTP_HOST] 봐.

이 접근 방식에서는 하위 도메인에 대한 다음 요청으로 전파하기 위해 Authlogic Params와 같은 패턴을 사용하지 않는 한 브라우저가 하위 도메인의 쿠키를 허용하도록 사용자의 로그인을 하위 도메인에서 수행해야합니다.

참고 : 브라우저는 요청이 상위 도메인에서 온 경우 하위 도메인의 쿠키를 거부합니다. 우리에게 이것은 나쁜 것이 아닙니다. 최상위 세션 쿠키가 생성되지 않고 나중에 하위 도메인으로 전송된다는 요구와 동일한 결과가 발생합니다.

비슷한 목적에 대한 또 다른 접근법은 하위 도메인이 아닌 경우 쿠키를 설정하지 않을 수도 있습니다. 거기에 많은 시간을 소비하지, 나는 이러한 목표를 달성 할 수 있었다 방법이었다 -에서

request.env["rack.session"] = ActionController::Session::AbstractStore::SessionHash.new(self, request.env)

을와 ApplicationController에 필터 후.