저는 레일즈 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 ...)
http://apidock.com/rails/ActionController/Base/reset_session –