Добавление данных в сеанс 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

Это также позволяет вам получить больше информации или воздействовать на объект, если вы хотите.

Другие вопросы по тегам