Ruby on rails 如何获得设计会话超时回调?

Ruby on rails 如何获得设计会话超时回调?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,devise,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Devise,当用户的会话使用Desive超时时,是否有方法获得回调/处理某些操作 覆盖DeviceSessionsController的普通旧版本不起作用: class SessionsController < Devise::SessionsController def destroy #do something super end end class sessioncontroller

当用户的会话使用Desive超时时,是否有方法获得回调/处理某些操作

覆盖DeviceSessionsController的普通旧版本不起作用:

class SessionsController < Devise::SessionsController

  def destroy
    #do something
    super
  end

end
class sessioncontroller
这只在用户注销时起作用,这是有意义的,因为它看起来不像是在会话超时时调用控制器。有人能帮我吗

before_filter :destroy_custom, :only => [ :destroy ]


def destroy_custom 
    # Do your thang
end

我能用新方法做到这一点。我猜对destroy也可以这样做。回调可以在design_custom内部调用,或者design_custom本身可以是您希望在销毁之前执行某些操作的方法。

我发现在注销之前执行Warden.before_是最好的解决方案:

# app/models/user.rb

Warden::Manager.before_logout do |user, auth, opts|
  #fdsafdsafdsa
end

不幸的是,纯Desive似乎没有任何方法可以做到这一点。

是的,问题是这在超时时不起作用。似乎当用户的会话到期时,实际上没有调用session#destroy。对不起,说话太早了。它似乎并没有真正调用destory方法。找到这个博客。希望有帮助。我添加了这个回调,但是当用户手动注销时调用它,而当用户会话超时时似乎不会调用它。我还需要做些什么来让这个回调在超时时工作吗?嗯,真奇怪。据我所知,如果你(例如)尝试访问一个页面,而应用程序发现你的会话超时,它应该可以工作。如果它不起作用,我建议再挖一些。但是请注意,会话超时不会触发事件,如果您正试图捕获这些事件。。。