2013-08-26 2 views
4

저는 레일즈 4.0.0에서 뭔가를 만들었고 이상한 세션 동작을하고 있습니다. 세션에 값을 쓰는 로그인 프로세스가 있습니다.Rails 4.0.0에서`reset_session` 호출은 두 번째 후속 페이지에서 작동하지 않습니다.

def current_user 
    logger.info "(current_user) Session ID: #{request.session[:user_id]}" 
    if session[:user_id] != nil && session[:user_id] != -1 
    User.find(session[:user_id]) 
    end 
end 
helper_method :current_user 

이 여러에서 호출됩니다

def login 
    session[:user_id] = user.id 

    #Then we render a simple page... 
end 

내가 유효한 사용자가 그 다음을 확인하기 위해, 내 application_controller.rb에서 도우미를 가지고 : 나는 사용자가 로그인하지 않은 결정 방법 그것의 부재이다 다른 장소에서 사용자 상태를 확인하고 페이지를 렌더링하는 방법을 결정할 수 있습니다.

def logout 
    reset_session 
end 

렌더링되는 뷰 네비게이션을 렌더링 할 current_user 헬퍼 메소드에 대한 호출을 포함한다 : (. != -1 아래 설명)가 로그 아웃 I 세션 재설정. 이 페이지는 내비게이션 부분에 현재 사용자가없는 것으로 표시되며 디버그 로그에는 세션 변수가 지워진 것으로 표시됩니다. 그러나 내가하는 일에 상관없이 다음 페이지에서 로그인 한 상태로 돌아가고 갑자기 다시 인증 된 사용자가 생겨 current_user이 세션에서 올바른 값을 얻게됩니다.

세션에 다른 값 (예 : -1)을 지정하려고했는데 동일한 영향을줍니다. 어떤 이유로 세션이 삭제 된 후 복원됩니다. 또한 다음을 사용할 때 :

def logout 
    reset_session 
    redirect_to root_path 
end 

색인 페이지는 로그인 한 사용자와 함께 표시됩니다. 이것은 매우 짜증나게합니다. Devise 등을 사용할 수있게되어서 고맙겠습니다. 그러나 이것은 이상한 세션 동작에 관한 것입니다.

상황이 나는 시도했다 :

  • rake tmp:sessions:clear로 실험하는 것은 효과가 없습니다.
  • 세션 값을 다른 것으로 덮어 씁니다.
  • _my_key 쿠키 값 검사 (절대로 변경되지 않음) - 응답 헤더에 반환 된 설정 값이 다른 값을 갖지만 ...? 이것은 약간 이상하게 보입니다.
  • 터보 링크가 제거되었습니다.
  • 사용 레일 4.0.0와 루비 2.0.0 p247
  • 크롬과 사파리는 ...

나는 완전히 이것에 의해 난처한 해요. 오 - 그리고 최종 키커로서 브라우저에서 세션 쿠키를 삭제하면 세션 쓰기도 실패합니다. 그래서 나는 결코 다시 그것을 얻지 않는다. 여기

업데이트는 로그인에 대한 로그입니다.

Started GET "/auth/google_oauth2/callbackstate=***************************&code=***********************************" for 127.0.0.1 at 2013-08-26 18:59:15 +0100 
I, [2013-08-26T18:59:15.307731 #7441] INFO -- omniauth: (google_oauth2) Callback phase initiated. 
Processing by UsersController#callback as HTML 
    Parameters: {"state"=>"*************************", "code"=>"****************************"} 
    User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."uid" = '************************' LIMIT 1 
(current_user) Session ID: 1 
Setting user_id in session: 1 => [1] 
    Account Load (2.4ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 ORDER BY "accounts"."id" ASC LIMIT 1 [["id", 1]] 
Redirected to http://127.0.0.1:3000/pages 
Completed 302 Found in 103ms (ActiveRecord: 7.3ms) 


Started GET "/Pages" for 127.0.0.1 at 2013-08-26 18:59:16 +0100 
Processing by PagesController#index as HTML 
(current_user) Session ID: 
    Rendered public/401.html (1.0ms) 
Filter chain halted as :is_authenticated rendered or redirected 
Completed 401 Unauthorized in 11ms (Views: 10.8ms | ActiveRecord: 0.0ms) 

당신은 (위와 같이) 두 줄 내 도우미 메서드를 모두 호출입니다 (current user)를 표시 볼 수 있습니다 : 내 브라우저에서 쿠키를 삭제 한없고 대신 로그 아웃 할 수없는, 나는 로그인 할 수 없습니다 . OmniAuth를 사용하여 Google OAuth에서 내 사용자 데이터를 가져오고 있지만 특히 관련이 없습니다. (AFAIK ...)

+0

http://apidock.com/rails/ActionController/Base/reset_session –

답변

2

젠장.나는이 응용 프로그램 멀티 테넌을 시도되었고, 내 session_store.rb에서 다음을했다 :

# Be sure to restart your server when you modify this file. 
MyApp::Application.config.session_store :cookie_store, key: '_MyApp_session' 

#writes cookies across all subdomain of this site. 
Rails.application.config.session_store :cookie_store, :key => '_my_key', :domain => ENV['APP_DOMAIN'] 

은 분명히이 나쁜이며, 쿠키 및 세션을 일이 미친 것들의 모든 종류를 야기한다. 그 단서는 _my_key에 있어야하는데, 나는 비표준이라고 생각 하나? 내 추측은 그 의미를 완전히 깨닫지 않고 다른 의문에서이 질문을 얻었다.

+0

정확히 무엇이 문제 였는지 설명 할 수 있습니까? 'session_store.rb'는 어떻게 지금 보입니까? – panzi

+1

나는 Rails.application을 시작한 줄을 제거해야했다. 레일즈가 다른 키 아래에 쿠키를 작성하게 만들었다. 그런 다음 로그 아웃하도록 쿠키를 재설정하면 실패합니다. 이 줄을 제거하면 기본 동작으로 돌아가서 문제가 해결되었습니다. – xmjw

관련 문제