9

我正在尝试从 Rails 3 中 Warden 的after_authenticate回调(在 Devise 下运行)访问当前会话。

在我的应用程序控制器的顶部,我想做类似的事情:

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

最终目标是获取注册前存储在会话中的记录 ID 列表,并在登录后将它们与用户模型相关联。

任何帮助将非常感激。

4

4 回答 4

24

auth.session ”获取/设置会话密钥“ warden.user.#{scope}.session ”中的数据。

假设您在 rails 应用程序中保存了 pending_ids:

session[:pending_ids] = ...

并且您想访问warden hook,您可以通过以下方式访问它:

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/manipulating-sessions-in-wardendevise,现在已经死了)。

于 2012-12-11T00:10:39.193 回答
2

您可以通过以下方式访问会话存储auth

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.session[:pending_ids])
end
于 2011-11-15T11:28:03.623 回答
0

您还可以通过 访问会话auth.request.session

所以你的例子是:

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.request.session[:pending_ids])
end
于 2016-08-30T03:45:53.553 回答
-1

您还可以从auth.raw_session

于 2011-12-30T13:51:59.737 回答