如何通过会话ID找到设计用户?

时间:2012-04-26 17:48:18

标签: ruby-on-rails ruby session devise

鉴于session["session_id"],是否可以找到该会话所属的User

2 个答案:

答案 0 :(得分:23)

至少在我的系统上(rails 3.2,设计2.0.4),你可以这样做:

session是:

{"session_id"=>"be02f27d504672bab3408a0ccf5c1db5", "_csrf_token"=>"DKaCNX3/DMloaCHbVSNq33NJjYIg51X0z/p2T1VRzfY=", "warden.user.user.key"=>["User", [3], "$2a$10$5HFWNuz5p6fT3Z4ZvJfQq."]}

session["warden.user.user.key"][1][0],然后是3

所以,我发现它是:

User.find(session["warden.user.user.key"][1][0])

答案 1 :(得分:3)

我不确定你想要完成什么,但会尝试回答

如果您只想要当前会话中的用户,一种简单的方法是将他的ID存储在会话中,例如:

def login(username, pass)
  # do the usual authentication stuff and get user
  if logedin
    session[:user_id] = user.id
  end
end 

然后让当前用户像

current_user =User.find(session[:user_id])

如果你想要的是找到当前登录的所有用户,我认为你需要配置你的应用程序以保存数据库中的会话,因为预定义的是会话数据存储在浏览器中的cookie中。有关此更多信息,请查看此答案 How to track online users in Rails?


编辑:刚刚注意到你正在使用设计,所以第一种方式实际上适合你。您只需要在任何控制器上调用current_user方法。 对于第二种方式,请检查此答案"Who's Online" using Devise in Rails

相关问题