Как я могу найти пользователя с помощью идентификатора сеанса?

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

Ответы

Ответ 1

По крайней мере, на моей системе (рельсы 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])

Ответ 2

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

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

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?


РЕДАКТИРОВАТЬ: Просто заметили, что вы используете программу, поэтому первый способ на самом деле для вас. Вам просто нужно вызвать метод current_user на любом контроллере. Для второго варианта проверьте этот ответ "Кто в сети" используя Devise in Rails