2012-04-26 2 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]) –

+0

Спасибо. Этот пример уродлив, но он работает. Еще раз спасибо. Этот пример для файлов cookie: http://stackoverflow.com/a/43549108/5754223 – artamonovdev

3

Я не уверен, что вы пытаетесь сделать, но будет пытаться ответить

Если вы хотите только пользователь с текущей сессии , простой способ будет хранить его идентификатор на сессии, например:

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]) 

Если то, что вы хотите это найти всех пользователей, которые в настоящее время вошли в систему, я думаю, что вам нужно конфигурации вашего приложения, чтобы сохранить сессию в БД, потому что предопределено, что данные сеанса хранят в куки в браузере , Для получения дополнительной информации об этом проверить этот ответ How to track online users in Rails?


EDIT: Просто заметил, что вы используете изобрести так первый способ на самом деле там для вас. Вам просто нужно вызвать метод current_user на любом контроллере. Для второго варианта проверьте этот ответ "Who's Online" using Devise in Rails

Смежные вопросы