2012-04-26 65 views

回答

23

至少在我的系統(導軌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

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