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

问题描述:

鉴于session["session_id"]是否有可能找到会话所属的登录User如何通过会话ID找到设计用户?

+0

你可以使用User.current_user来代替......你试过了吗? – 2012-04-26 18:06:51

至少在我的系统(导轨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]) 
+10

On Rails 4.2.1,Devise 3.4.1你会想使用User.find(session [“warden.user.user.key”] [0] [0]) – 2015-04-06 05:02:36

+0

谢谢。这个例子很难看,但它工作。再次感谢。这个饼干的例子:http://stackoverflow.com/a/43549108/5754223 – artamonovdev 2017-04-21 17:51:37

我不知道你想什么来完成,但会尽量回答

如果只想从当前会话的用户,一个简单的办法是给他的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