Как получить доступ к сеансу из обратного вызова Warden / Devise after_authentication в Rails - PullRequest
9 голосов
/ 07 октября 2011

Я пытаюсь получить доступ к текущему сеансу из обратного вызова Warden'а after_authenticate (работает под Devise) в Rails 3.

В верхней части моего контроллера приложений я хочу сделать что-то вроде:

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(session[:pending_ids])
end

Конечная цель - взять список идентификаторов записей, которые были сохранены в сеансе до регистрации, и связать их с моделью пользователя после входа в систему.

Любая помощь будет высоко ценится.

Ответы [ 4 ]

24 голосов
/ 11 декабря 2012

" auth.session " получить / установить данные в ключе сеанса " warden.user. # {Scope} .session ".

Предположим, что вы сохранили pending_ids в своем приложении rails:

session[:pending_ids] = ...

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

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.env['rack.session'][:pending_ids])
end

Мне потребовалось некоторое время, чтобы выяснить это, поэтому я думаю, что это могло бы помочь кому-то.

(первоначально взято с diegoscataglini.com/2012/02/09/383 / манипулирование сессиями в wardendevise, который теперь мертв).

2 голосов
/ 15 ноября 2011

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

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.session[:pending_ids])
end
0 голосов
/ 30 августа 2016

Вы также можете получить доступ к сеансу через auth.request.session.

Итак, ваш пример будет:

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.request.session[:pending_ids])
end
0 голосов
/ 30 декабря 2011

вы также можете найти всю сессию из auth.raw_session

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...