18

鉴于session["session_id"]是否可以找到该User会话所属的登录帐户?

4

2 回答 2

25

至少在我的系统上(rails 3.2,devise 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])
于 2012-04-26T18:01:30.360 回答
4

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

如果您只想要当前会话中的用户,一种简单的方法是将他的 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 中。有关此问题的更多信息,请查看此答案 如何在 Rails 中跟踪在线用户?


编辑:刚刚注意到你正在使用设计,所以第一种方法实际上是为你准备的。您只需要current_user在任何控制器上调用方法。对于第二种方法,使用 Rails 中的 Devise 检查这个答案“Who's Online”

于 2012-04-26T18:39:28.413 回答