Вопрос по ruby-on-rails, session, ruby – Как я могу найти разработанного пользователя по его идентификатору сеанса?

15

Даноsession["session_id"] можно ли найти залогиненныйUser к которой принадлежит эта сессия?

Вместо этого вы можете использовать User.current_user ... вы пробовали? Victor Rodrigues

Ваш Ответ

2   ответа
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])

Если вам нужно найти всех пользователей, которые в данный момент вошли в систему, я думаю, что вам нужно настроить приложение для сохранения сеанса в БД, поскольку предварительно определено, что данные сеанса хранятся в файлах cookie в браузере. Для получения дополнительной информации об этом проверьте этот ответ Как отслеживать онлайн-пользователей в Rails?

EDIT: Просто заметил, что вы используете устройство, так что первый способ на самом деле для вас. Вам просто нужно позвонитьcurrent_user Метод на любом контроллере. Для второго способа проверьте этот ответ& quot; Кто онлайн & quot; используя Devise в Rails

23

в моей системе (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])
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/43549108/5754223

Похожие вопросы