【问题标题】:How can I obtain user's last active time when using Devise?使用 Devise 时如何获取用户的上次活动时间?
【发布时间】:2013-01-02 23:45:40
【问题描述】:

假设用户在网站上花费了很长时间。
如何获取用户的最后活动时间。 上次活动时间是指用户请求(访问页面。用户甚至不需要更新或创建新记录)到应用程序的最后一个时间戳。

用户可能在一小时前登录。然后他还在我的网站上上网。 我想要用户上次发送请求的时间。

有可能吗?

Devise 有 current_sign_in_at 但不是上次活动时间。

【问题讨论】:

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


    【解决方案1】:

    我实现这一点的方法是在 User 模型中添加一个 last_active_at datetime 列,然后在我的控制器中放入一些东西:

    class ApplicationController
      before_filter :record_user_activity
    
      private
    
      def record_user_activity
        if current_user
          current_user.touch :last_active_at
        end
      end
    end
    

    【讨论】:

    • 我正在使用 ajax 的 setInterval,所以每次它自动重新加载时,它都会更新这个 last_active_at 我该如何设置异常?动作是'community#refresh'
    • 如果您使用 setInterval 定期向服务器发送 AJAX 调用并获取新数据,那么您不需要做任何事情。过滤器仍然会在 community#refresh 操作之前运行,即使它是通过 AJAX 进入的,只要用户打开了 cookie 并且没有任何其他可能中断用户会话的东西。
    • 使用 after_filter 会更好,还是没关系?
    • after_filter 将在操作完成后运行,但在 HTTP 响应发送回用户浏览器之前运行。那里有一些区别。例如,如果touch :last_active_at 失败,您希望它在之前 还是 您执行用户尝试的任何操作之后失败?没有一个正确答案,但我倾向于before_filter
    • 这将为每个请求添加一个 I/O 附加。如果您想要一个可扩展的网站,我会避免这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2011-01-21
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多