2011-10-06 6 views
8

Estoy intentando acceder a la sesión actual de after_authenticate de devolución de llamada de Warden (que corre por debajo Idear) en Rails 3.Cómo acceder a la sesión de Alcaide/Idear after_authentication de devolución de llamada en Rails

En la parte superior de mi controlador de aplicación que quiero hacer algo como:

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

el objetivo final es tener una lista de ID de registros que se almacenaron en la sesión antes de inscribirse y asociarlos con el modelo de usuario después de signo en

cualquier ayuda. ser mucha aplicación Reciated

Respuesta

21

"auth.session" GET/establece los datos de la clave de sesión "warden.user. # {scope} .session".

Suponiendo que habías salvado pending_ids dentro de su raíles de aplicación:

session[:pending_ids] = ... 

y que quería acceso en el gancho de guardia, que podría acceder a él de esta manera:

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

Me tomó un tiempo para descubrirlo, así que supongo que podría ser de alguna ayuda para alguien.

(originalmente tomado de diegoscataglini.com/2012/02/09/383/manipulating-sessions-in-wardendevise, que ahora está muerto).

+1

Esto funcionó para mí, la respuesta debajo de auth.session no. – cpuguy83

+0

Gracias! Este es un gran pequeño truco! – LukeS

2

Se puede acceder al almacenamiento de sesión a través de auth:

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

encontré que auth.session no funcionó. Existe, pero no es lo mismo que la sesión desde el contexto del controlador. – cpuguy83

+0

Cuando hago eso obtengo una variable local o método 'session 'indefinido para #

-2

también se pueden encontrar toda la sesión de la auth.raw_session

0

También puede acceder a la sesión a través del auth.request.session.

Así que su ejemplo podría ser:

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