Добавление данных в сеанс Devise
Я использую Rails 4 и хотел бы добавить больше данных в сессию, которую Devise/Warden создает при входе в систему.
Идентификатор пользователя хранится в ["warden.user.user.key"], но я бы хотел добавить адрес электронной почты и имя пользователя.
Это связано, но противоположно тому, что я хотел бы сделать: как получить доступ к сеансу из обратного вызова Warden/Devise after_authentication в Rails
2 ответа
Я понял это, добавив это в мой файл config/initializers/devise.rb. Не уверен, что это безопасно или правильный путь, но это работает.
Warden::Manager.after_authentication do |user,auth,opts|
auth.raw_session['warden.user.user.email'] = user.email
auth.raw_session['warden.user.user.username'] = user.username
end
Обычно вы используете для этого сериализатор Warden, как я упоминал в моем руководстве Warden:
config.middleware.use Warden::Manager do |manager|
manager.default_strategies :password
manager.serialize_into_session do |user|
user.id
end
manager.serialize_from_session do |id|
User.find(id)
end
end
Затем, когда вы хотите получить информацию о пользователе:
env['warden'].user.email
env['warden'].user.username
Это также позволяет вам получить больше информации или воздействовать на объект, если вы хотите.