Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access session from Warden/Devise after_authentication callback in Rails

I'm trying to access the current session from Warden's after_authenticate callback (running underneath Devise) in Rails 3.

At the top of my application controller I want to do something like:

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

The ultimate goal is to take a list of record IDs that were stored in the session before sign up and associate them with the user model after sign in.

Any help would be much appreciated.

like image 416
Alex Dunae Avatar asked Oct 06 '11 20:10

Alex Dunae


2 Answers

"auth.session" get/sets the data in the session key "warden.user.#{scope}.session".

Supposing you had saved pending_ids within your rails app:

session[:pending_ids] = ...

and you wanted to acces in the warden hook, you could access it this way:

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

It took me a while to find that out, so I guess it might be of some help for somebody.

(originally taken from diegoscataglini.com/2012/02/09/383/manipulating-sessions-in-wardendevise, which is now dead).

like image 171
polmiro Avatar answered Nov 17 '22 14:11

polmiro


You can access the session store via auth:

Warden::Manager.after_authentication do |user,auth,opts|
  user.associate_with_ids(auth.session[:pending_ids])
end
like image 31
fabi Avatar answered Nov 17 '22 15:11

fabi