使用扭矩箱会话限制扭矩箱中的用户登录

时间:2012-10-16 21:25:49

标签: ruby-on-rails session jruby torquebox

我想使用torquebox并限制用户登录jruby rails应用程序,以便他无法从多个浏览器登录。当有人登录并使旧会话无效时,我通过跟踪用户ID和会话ID来使用activerecord会话。

我怎样才能在Torquebox中做类似的事情?我没有在TorqueBox :: Session模块上看到类方法,所以我可以使其他会话无效,只是访问intance的方法。会议工作方式的机制尚不清楚。我在这里看:https://github.com/torquebox/torquebox/tree/2x-dev/gems/web/lib

2 个答案:

答案 0 :(得分:0)

如果当前会话对象存储在本地,请说current_session

TorqueBox::Session::ServletStore.load_session_data(current_session)

这将允许您查看当前会话数据,并附带一个姐妹函数,使您还可以在会话存储中设置数据store_session_data(...)

TorqueBox::Session::ServletStore.store_session_data(current_session, data)

您还可以将data设置为{}(空哈希)以使其无效(对于大多数意图和目的而言)。

当前会话对象的可用性将根据范围而有所不同。例如,在stomplet中,我必须对订阅者进行一些内省以获取current_session对象以查看会话数据:

class ChatStomplet
  # ...

  def on_subscribe (subscriber)
    @subscribers[ session(subscriber)[:current_user].username ] << subscriber
  end

  # ...

  def session (subscriber)
    TorqueBox::Session::ServletStore.load_session_data(subscriber.getSession)
  end
end

你也应该看看ActionDispatch::Session::TorqueBoxStore api。

我个人无法找到很多相关文档。事实上,我仍在寻找一种方法来查找当前所有活动的会话。如果它们实现AbstractStore's interface会有所帮助,因为与当前Rails约定的兼容性会有很长的路要走。

我知道这不是一个完整的答案,但希望它能为你的旅行提供一些启示......

答案 1 :(得分:0)

TorqueBox(至少2.x)将Java会话ID存储在session[:session_id]中。如果您需要从中间件获取它,可以在env['rack.session'][:session_id]中找到它。