2012-04-26 13 views

Odpowiedz

23

Przynajmniej w moim systemie (szyny 3.2, opracowanie 2.0.4), można zrobić to tak:

session jest:

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

session["warden.user.user.key"][1][0], to jest 3.

Więc ja go znaleźć jako:

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

W Rails 4.2.1, Devise 3.4.1 będziesz chciał użyć User.find (sesja ["warden.user.user.key"] [0] [0]) –

+0

Dzięki. Ten przykład jest brzydki, ale działa. Dzięki jeszcze raz. Ten przykład plików cookie: http://stackoverflow.com/a/43549108/5754223 – artamonovdev

3

Nie jestem pewien, co chce osiągnąć, ale postaram się odpowiedzieć

Jeśli chcesz tylko użytkowników z bieżącej sesji , prostym sposobem byłoby, aby zapisać swój identyfikator na sesji, na przykład:

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

następnie uzyskać bieżący użytkownik będzie coś

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

Jeśli to, co chcesz, jest znalezienie wszystkich użytkowników, które są aktualnie zalogowany, myślę, że trzeba config swoją aplikację, aby zapisać sesję w DB, bo predefiniowane jest, że dane sesji jest przechowywać w plikach cookie w przeglądarce . Aby uzyskać więcej informacji na ten temat można sprawdzić tę odpowiedź How to track online users in Rails?


EDIT: Właśnie zauważyliśmy używasz opracować więc pierwszy sposób jest rzeczywiście dla ciebie. Trzeba tylko wywołać metodę current_user na dowolnym kontrolerze. Po drugie, sprawdź tę odpowiedź. "Who's Online" using Devise in Rails

Powiązane problemy