2010-07-29 2 views
1

저는 authlogic을 사용하여 사용자를 인증합니다.declarative_authorization 및 authlogic을 사용하여 current_user 확인

def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 
    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
    end 

나는 또한 현재 사용자의 권한을 관리 할 수 ​​declarative_authorization을 사용하여 다음과 같이 내 컨트롤러에서 나는 CURRENT_USER (문서화) 정의를 사용합니다. 정상적인 런타임 시나리오에서는 모두 정상적으로 작동하지만 "get_with"와 같은 요청 문을 사용하는 기능 테스트를 만들 때 컨트롤러의 current_user는 nil입니다. declarative_authorization 테스트 도우미 코드를 살펴본 결과,이 시나리오에서 declarative_authorization gem은 실제로 현재 사용자를 Authorization.current_user (실제로는 Thread.current [ "current_user"]에서 가져옴)에 저장한다는 것을 알았습니다. 따라서 현재 사용자가 다른 시나리오에서 어떻게 처리되는지에 대한 혼란이있는 것으로 보입니다.

내 질문 : 일반적인 런타임과 테스트 시나리오 모두에서 current_user를 찾는 적절한 방법은 무엇입니까?

답변

0

Angelus, 당신 말이 맞았습니다. 나는 get_with, post_with 등을 사용해서는 안된다. 이것들은 단지 Authorization.current_user, 세션 [: user]과 세션 [: user_id]을 설정하고 이것들은 authlogic으로 쓸모없는 것처럼 보인다. 그리고 어떤 이유로, UserSession을 nil로 설정하여 문제를 일으켰습니다. 그래서 UserSession.create (사용자 (: admin)), 그 다음에 일반 get, post 등이 있습니다.

0

application_controller에서 before_filter를 이와 같이 정의 할 수 있습니다.

before_filter {| c | Authorization.current_user = c.current_user}

+0

그래, 나는 그것을 시도했다. 그러나 그 반대의 경우는 기능 테스트에서 Authorization.current_user에 올바른 사용자가 있지만 c.current_user == nil이 포함되어 있습니다. 그래서이 진술은 작동하지 않을 것입니다 ... –

+0

하나의 질문 테스트에서 사용자 세션을 어떻게 유지합니까? 세션을 디버그하려고하면 현재 어떤 이유로 든 지속될 수 있습니다. –

+1

필자는 authlogic을 사용하여 사용자로 로그인하려면 UserSession.create (user (: admin))를 통해 세션을 작성해야하며 authlogic 현재 사용자가 작동해야합니다. – Draiken