1

私のDevise/Wardenベースのアプリは、モデルIDをsession[]変数に格納します。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

質問を言い換えると、ウィザードオブジェクトをいつどのように破棄する必要がありますか?

4

2 に答える 2

0

セッションとは、ユーザーがいつログアウトするかを意味しますか?

モンキーパッチを適用してみてくださいsign_outapplication_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
于 2011-07-26T12:26:57.723 に答える
0
Warden::Manager.before_logout do |user,auth,opts| 
  # callback 
end 

ワーデン::フックhttps://github.com/hassox/warden/blob/master/lib/warden/hooks.rbを使用して、サインアウトまたは認証後に処理を実行します。

于 2012-02-08T01:30:17.420 に答える