2014-12-18 3 views
1

У меня есть приложение Rails4, и я пытаюсь выполнить флеш-настройку пользовательского сообщения, когда сеанс истекает из-за неактивности.Сообщение «true» мигает на главной странице после таймаута сеанса

Я делаю это с помощью настройки параметра timeout_in в devise.rb:

Devise.setup do |config| 
    ... 
    config.timeout_in = 30.minutes 
    ... 
end 

и добавление пользовательских спасения в мой контроллер приложения:

rescue_from CanCan::AccessDenied do |exception| 
    if user_signed_in? 
    flash.now.alert = exception.message 
    render text: '', layout: true, status: 403 
    else 
    redirect_to new_user_session_path, notice: flash[:alert] || "You must login first" 
    end 
end 

Все, кажется, работает нормально ... когда время сеанса заканчивается, flash[:alert] уже имеет правильное сообщение, поэтому я просто использую его, и когда пользователь пытается получить доступ к ресурсу без входа в систему сначала, возвращается сообщение «Вы должны войти первым».

Это код в страницы main.html.haml, что делает эти предупреждения:

.container 
    .main-content 
    #flash 
     - flash.each do |type, msg| 
     %div{class: ('alert alert-dismissable fade in')} 
      %button.close{data: {dismiss: :alert}} × 
      = msg 
    = yield 

Проблема заключается в том, что раз в то время как я вижу вспышку с текстом «Правда» появляется прямо ниже сессия сообщение тайм-аут:

Message showing True

, и я не могу понять, где он и откуда. Кажется, что что-то создает флэш-сообщение с этим значением. Интересно, что я делаю неправильно или если есть лучший способ отображать сообщения таймаута сеанса. Есть идеи?

ответ

1

Попробуйте вывести type каждой вспышки - возможно, Devise или что-то еще использует вспышку для других вещей, чем просто сообщения. Read more about using the flash for other things than messages.

Я бы не стал перебирать все флэш-ключи для их рендеринга - я бы явно отображал только те, которые предназначены для сообщений (обычно :notice10 и :alert).

+0

Спасибо Хенрика. Я не уверен, что решение о том, что приложение «flash» controlloing application было хорошим решением, в первую очередь, но так оно и работает, и мы ничего не можем с этим поделать. –

2

Я знаю, что это поздний ответ, но это то, что я сделал.

flash.each do |type, message| 
    unless type.to_s == 'timedout' 
    <!-- Carry on printing messages --> 
Смежные вопросы