我正在使用Rails 4,并希望在登录时为Devise / Warden创建的会话添加更多数据。
user_id存储在[“warden.user.user.key”]中,但我也想添加用户的电子邮件和用户名。
这是相关的,但与我想要做的相反:How to access session from Warden/Devise after_authentication callback in Rails
答案 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
这也使您能够获得更多信息,或者如果您愿意,可以对该对象采取行动。