鉴于session["session_id"]
是否可以找到该User
会话所属的登录帐户?
问问题
25182 次
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 回答