2011-01-13 6 views
2

Passenger에서 Rails 3.0.3을 사용하면 모든 요청에 ​​대해 마지막 플래시 세트가 유지되는 문제가 있습니다. 사용자 후 후속 요청이 성공적으로 로그인 한에 플래시 메시지가 지워지지 않습니다

def require_user 
    unless current_user 
     store_location 
     flash[:notice] = "You must be logged in to access this page" 
     redirect_to login_url 
     return false 
    end 
end 

그러나 우리는 여전히 플래시 메시지가,를 지속 얻을 : 사용자가 이전 필터에 로그인해야하는 경우 예를 들어, 우리는 플래시 메시지를 설정하는 전체 세션을 지우지 않습니다.

이 예에서는이 메시지를 설정하는 유일한 곳이며 사용자가 로그인하지 않았을 때만 설정되도록하고 있습니다. 사실을 넣은 다음 비공개 블록을 새로 고친 다음 제거했습니다. 모든 후속 요청에 대해서는 'Test'플래시 메시지가 유지됩니다.

개발 또는 프로덕션 환경에서 앱을 실행하면 이러한 현상이 발생합니다.

답변

1

일부 이전 코드에서 걸어 놓은 Hash#symbolize_keys!에 대한 사용자 지정 재정의가 있었으며 쿠키 미들웨어가 쿠키에 symbolize_keys!을 호출하면 요청이 끝날 때 플래시가 다시 적용되는 것으로 나타납니다.

다른 사람이이 문제를 경험할 것 같지 않지만이 경우 문제가 있습니다.

0

플래시 메시지는 각 요청이 시작될 때 자동으로 정리됩니다.

사용자가 로그인하지 않은 경우 current_user 메소드가 nil을 반환합니까?

사용자 세션 관리에 어떤 라이브러리를 사용하고 있습니까? Devise/Authlogic 또는 기타?

+0

내 질문에 말했듯이이 방법 만이 아니라 단지 예제 일뿐입니다. 그 방법에서 모든 것을 제거하고 플래시 [: notice] = 'Test'에 넣으면 'Test'가됩니다. 이를 제거하면 메서드에 아무 것도없고 'Test'고지가 영원히 멈 춥니 다. – DEfusion

관련 문제