My Devise / Warden-based app在session []变量中存储模型ID。我想在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
重述一个问题:我应该如何以及何时销毁向导对象?
答案 0 :(得分:0)
通过会话,您的意思是当用户退出时?
尝试猴子修补sign_out
application_controller.rb
方法
您可以在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
答案 1 :(得分:0)
Warden::Manager.before_logout do |user,auth,opts|
# callback
end
使用Warden :: Hooks https://github.com/hassox/warden/blob/master/lib/warden/hooks.rb在注销或身份验证后执行操作。