将数据添加到Devise会话

时间:2014-05-16 00:16:47

标签: ruby-on-rails-4 devise warden

我正在使用Rails 4,并希望在登录时为Devise / Warden创建的会话添加更多数据。

user_id存储在[“warden.user.user.key”]中,但我也想添加用户的电子邮件和用户名。

这是相关的,但与我想要做的相反:How to access session from Warden/Devise after_authentication callback in Rails

2 个答案:

答案 0 :(得分:1)

我把它添加到我的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

答案 1 :(得分:1)

正如我在Warden guide中提到的那样,通常你会使用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

这也使您能够获得更多信息,或者如果您愿意,可以对该对象采取行动。