【问题标题】:How to get Devise session timeout callback?如何获得设计会话超时回调?
【发布时间】:2012-06-01 00:56:58
【问题描述】:

当用户使用 Devise 的会话超时时,有没有办法获得回调/处理某些操作?

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

class SessionsController < Devise::SessionsController

  def destroy
    #do something
    super
  end

end

这仅在用户注销时有效,这是有道理的,因为会话超时时似乎不会调用控制器。有人可以帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise


    【解决方案1】:

    我发现做 Warden.before_logout 是最好的解决方案:

    # app/models/user.rb
    
    Warden::Manager.before_logout do |user, auth, opts|
      #fdsafdsafdsa
    end
    

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

    【讨论】:

    • 我已经添加了这个回调,但是当用户手动注销时它被调用,当用户的会话超时时它似乎没有被调用。我还需要做些什么才能让这个回调在超时时工作吗?
    • 嗯,这很奇怪。据我所知,如果您 - 例如 - 尝试访问一个页面并且应用程序注意到您的会话已超时,它应该可以工作。如果它不起作用,我建议做更多的挖掘。但是请注意,会话超时不会触发事件,如果这是您要捕获的内容...
    【解决方案2】:
    before_filter :destroy_custom, :only => [ :destroy ]
    
    
    def destroy_custom 
        # Do your thang
    end
    

    我能够在新方法上做到这一点。我猜也可以对破坏做同样的事情。回调可以在 devise_custom 内部调用,或者 devise_custom 本身可以是您想要在销毁之前执行某些操作的方法。

    【讨论】:

    • 是的,问题是这在超时时不起作用。似乎 session#destroy 在用户会话过期时实际上没有被调用
    • 抱歉,说得太早了。它似乎并没有真正调用 destory 方法。找到了这个博客。希望它有所帮助。 madkingsmusings.blogspot.com/2011/05/…
    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 2010-11-20
    • 2021-12-28
    • 2011-04-27
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多