2011-01-13 45 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を返しますか?

ユーザセッション管理にはどのライブラリを使用していますか?デビス/ Authlogicまたは他の?

+0

私が質問したように、この方法だけではありません。これは単なる例です。私がその方法からすべてを取り除き、フラッシュ[:notice] = 'Test'に入れると、私は 'Test'を得ます。それを削除してメソッドに何もないので、 'Test'通知が永遠にハングアップします。 – DEfusion

関連する問題