2011-01-13 6 views
2

Используя 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 

Однако на любой последующий запрос после того как пользователь вошел в систему успешно, мы до сих пор получить сообщение флэш сохраняющиеся, ее никогда не очищается для всего сеанса.

В этом примере это единственное место, где мы устанавливаем это сообщение, и я убедился, что он установлен только тогда, когда пользователь не вошел в систему. Фактически, если я поместил flash[:notice] = 'Test' после того, как блок не обновился, а затем удалил и сообщение «Test» остается для всех последующих запросов.

Это происходит, если вы запускаете приложение либо в разработке, либо в разработке env.

ответ

1

У нас было специальное переопределение для Hash#symbolize_keys!, которое зависало от какого-то старого кода, и кажется, что когда промежуточное ПО cookie вызывает symbolize_keys! в файле cookie, это вызывало повторное применение флэш-памяти в конце запроса.

Я сомневаюсь, что кто-нибудь еще испытает эту проблему, но в нашем случае это и есть проблема.

0

Вспышки сообщения автоматически очищаются в начале каждого запроса.

Вы уверены, что ваш метод current_user возвращает nil, если пользователь не вошел в систему?

Какую библиотеку вы используете для управления сеансом пользователя? Разработать/Authlogic или другое?

+0

Как я уже сказал в своем вопросе, это не просто этот метод, это просто пример. Если я удалю все из этого метода и поставлю flash [: notice] = 'Test', я получаю «Test». Удалите это, чтобы в методе ничего не было, и уведомление «Test» всегда висит вокруг. – DEfusion

Смежные вопросы