Почему моя вспышка [: note] постоянно отображается на перенаправленной странице? - Рельсы 3.1 - PullRequest
1 голос
/ 11 октября 2011

Почему моя вспышка [: note] постоянно отображается на перенаправленной странице? - Рельсы 3.1

По моему ApplicationController У меня есть before_filter:

before_filter   :expire_session

def expire_session
  if session
    reset_session if session[:last_seen] < 15.minutes.ago
    flash[:error] = "Your session has timed out. Please log back in."
    session[:last_seen] = Time.now
  end
end

В моих sessions_controller это действия error и destroy:

  def error
    flash[:error] = "We're sorry. You need to sign in to get access to that page."
    redirect_to root_path
  end

  def destroy
    reset_session
    redirect_to root_path, :notice => "Signed out!"
  end

Это работает отлично, то есть истекает мой сеанс после X минут бездействия - что я и хочу. Проблема в том, что когда он перенаправляет меня на root_path, появляется следующее сообщение:

Your session has timed out. Please log back in.

Если я перезагрузлю страницу, сообщение все еще там. Если я закрою вкладку и вернусь к этому URL, это сообщение все еще там.

Другие сообщения, сгенерированные в flash[:notice] or flash[:error], отображаются только один раз, и при перезагрузке страницы они исчезают.

Почему этот торчит?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

Попробуйте переписать метод expire:

before_filter   :expire_session

def expire_session
  if session && session[:last_seen] < 15.minutes.ago
    reset_session
    flash[:error] = "Your session has timed out. Please log back in."
  elsif session
    session[:last_seen] = Time.now
  end
end
1 голос
/ 11 октября 2011

Вы не разделяете условие, поэтому вы устанавливаете вспышку при каждом запросе. Вы можете исправить это так:

def expire_session
  return unless session

  if session[:last_seen] < 15.minutes.ago
    session[:last_seen] = Time.now
  else
    reset_session
    flash[:error] = "Your session has timed out. Please log back in."
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...