#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. Это пустая переменная