Можно ли уведомить мое приложение об уничтожении сеанса? Если так, то как? - PullRequest
1 голос
/ 25 июля 2011

Приложение на основе My Devise / Warden сохраняет идентификатор модели в переменной session [].Я хочу уничтожить объект, когда сессия [] уничтожена.

  • Есть ли обратный вызов или какой-то механизм, чтобы уведомить мое приложение, когда сеанс уничтожен?
  • Надежен ли механизм, или я должен запустить скрипт ночной очистки, чтобы пылесосить любого осиротевшегообъекты?

Чтобы прояснить ситуацию, вот фрагмент кода моего контроллера:

class WizardsController < ApplicationController
  before_filter :find_or_create_wizard
  ...
private

  def find_or_create_wizard
    @wizard = Wizard.find_by_id(session[:wizard_id]) || Wizard.create.tap {|w| session[:wizard_id] = w }
  end

end

Повторяю вопрос: как и когда я должен уничтожить объект Wizard?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012
Warden::Manager.before_logout do |user,auth,opts| 
  # callback 
end 

Используйте Warden :: Hooks https://github.com/hassox/warden/blob/master/lib/warden/hooks.rb для выполнения действий после выхода из системы или аутентификации.

0 голосов
/ 26 июля 2011

Под сеансом вы подразумеваете, когда пользователь выходит из системы?

Попробуйте обезьянить патч sign_out в вашем application_controller.rb Вы можете найти соответствующий код Gem в lib/devise/controllers/helpers.rb

def sign_out(resource_or_scope=nil)
    Wizard.find_by_id(session[:wizard_id]) || Wizard.create.tap {|w| session[:wizard_id] = w }
    super(resource_or_scope)
end

Данные сеанса также очищаются всякий раз, когда пользователь входит в систему или регистрируется с помощью функции с именем expire_session_data_after_sign_in!, это также может переопределить это:

def expire_session_data_after_sign_in!
        Wizard.find_by_id(session[:wizard_id]) || Wizard.create.tap {|w| session[:wizard_id] = w }
        super
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...