получить идентификатор сеанса от warden или devise

#ruby-on-rails #ruby #devise #warden

#ruby-on-rails #ruby #разработать #warden

Вопрос:

Мне нужно получить идентификатор сеанса для пользователя и использовать его предпочтительно в модели.

Вот суть:

1) У меня есть список предложений. 2) Незарегистрированные пользователи могут создавать предложения, и их идентификатор сеанса сохраняется для них. 3) Когда пользователь регистрируется или входит в систему, его идентификатор сеанса должен совпадать с предложениями. 4) Затем их идентификатор пользователя также должен быть сохранен в предложении.

Я думал о переопределении контроллеров Devise или использовании перехватчиков Warden в файле приложения rails, но эти решения кажутся запутанными.

Комментарии:

1. Здесь не нужно переопределять devise или warden. Просто получите session.id и используйте его в записях. Когда пользователь входит в систему, вы можете отобразить флэш-сообщение, если у него есть записи, которые у него не сохранены. Затем связать с действием контроллера с помощью логики повторной привязки.

2. Где это доступно?

3. должно быть доступно при настройке сеанса. Просто попробуйте вызвать <%= session.id %> представление или что-то в этомроде.

4. Я хотел бы получить доступ к переменной сеанса из контроллера входа и регистрации, чтобы упростить задачу, поскольку пользователь попадет на страницу, где он был последним. Я думаю, вы предполагаете, что после входа пользователя в систему они должны быть отправлены на определенную страницу / контроллер?

Ответ №1:

Вы можете использовать следующее в контроллерах или представлениях:

 session['session_id']
=> '69384476b67fa4c2d1e3cc340eb4e951'
  

Комментарии:

1. В некоторых ограниченных тестированиях похоже, что session [‘session_id’] сбрасывается при успешном входе в систему — поэтому идентификаторы разные.

2. он сбрасывается для предотвращения атак с фиксацией сеанса

3. Это пустая переменная