我的目标是允许Rails网络应用的用户在其他计算机上查看所有打开的会话,并远程关闭/注销这些会话。类似于gmail的“帐户活动”页面(链接位于gmail收件箱页面的底部)。
我可以通过使用数据库中的会话来实现这一目标
account_sessions = CGI::Session::ActiveRecordStore::Session.find(:all)
并迭代它们以查找与当前用户相对应的会话(用户ID存储在会话数据中),并允许用户销毁这些会话。
但是,这并不能提供使用Rails模型的通常方便。我不能轻易地表达与用户的has_many关系并使用
current_user.sessions
我也不能轻易地在user_id上放一个索引,因为它位于会话的数据部分(而不是它自己的列)。
如果会话数量增加,这种方法也可能变得不切实际,因为在上面这个表被读入内存。
作为一种解决方案,我正在考虑创建自己的模型,该模型“镜像”会话的相关部分并创建/更新/销毁以维持该对应关系。
由于数据复制和代码复杂性增加,这不是一个很好的方法,但我没有找到另一种方法。
所以问题是:这是一个很好的方法,或者我错过了什么?
提前致谢!
弗雷泽
编辑:我应该提到我目前正在使用restful-authentication,并且不想切换。
答案 0 :(得分:0)
由于authlogic提供了用户会话模型且易于扩展,因此如果您不介意切换到其他身份验证机制,则应该能够实现您想要的功能。
编辑:This Railscast应该给你很好的概述。