Authlogic gem:在会话级别而不是用户级别使用 last_request_at 列

问题描述

问题:如果我在两台设备(例如 A 和 B)上以同一用户身份登录,并且我在一台设备 (A) 上使用我的应用程序,而另一台设备 (B) 保持不活动状态。设备 B 在使用功能logout_on_timeout时会话到期时不会注销。

我正在尝试实现 authlogic gem 的 logout_on_timeout 功能,我成功​​实现了该功能,但问题是无论浏览器如何,authlogic 都会在每个请求中更新用户的 last_request_at 属性或登录的设备。因此,如果我从移动设备和台式机登录同一用户,并且其中一个设备处于活动状态,那么另一台设备也会保持活动状态,因为它使用相同的共享 last_request_at来自用户的属性。

来自 authlogic gem 的参考代码:lib/authlogic/acts_as_authentic/logged_in_status.rb


        # Returns true if the last_request_at > logged_in_timeout.
          def logged_in?
            unless respond_to?(:last_request_at)
              raise(
                "Can not determine the records login state because " \
                  "there is no last_request_at column"
              )
            end
            !last_request_at.nil? && last_request_at > logged_in_timeout.seconds.ago
          end

那么我该如何解决这个问题呢?有没有办法在会话级别实现它?就像在 UserSession 模型中使用 last_request_at 一样。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)