ruby-on-rails-3 - rail - gema devise
Rails 3: ¿cómo se puede acceder al current_user de Devise en la consola IRB? (2)
Estoy haciendo un diseño / depuración en IRB y necesito iniciar sesión en un usuario y luego poder usar current_user en mis esfuerzos.
De la answer Brian Deterling a otra pregunta, he podido iniciar sesión con éxito y acceder a una respuesta de página con esta secuencia:
>> ApplicationController.allow_forgery_protection = false
>> app.post(''/sign_in'', {"user"=>{"login"=>"some-login-id", "password"=>"some-password"}})
>> app.get ''/some_other_path_that_only_works_if_logged_in''
>> pp app.response.body
NOTA: Si obtiene una respuesta de 200, no está conectado. Necesita una redirección 302 para indicar un inicio de sesión exitoso. Vea la respuesta de Tim Santeford.
Pude obtener información de la sesión:
1.9.3-p125 :009 > app.session
=> {"_csrf_token"=>"1yAn0jI4VWzUH84PNTH0lVhjpY98e9echQGS4=", "session_id"=>"89984667d30d0fec71f2a5cbb9017e24"}
Intenté todo lo que se me ocurrió para intentar llegar al app.session
través de la app
y la app.session
app
, pero no app.session
suerte. ¿Cómo puedo obtener current_user
?
Es posible que no estés realmente iniciando sesión. Una cosa a tener en cuenta es que Devise construyo sobre Warden, que es middleware de rack.
Probé tu método app.post para iniciar sesión en una aplicación en la que estoy trabajando que usa Devise. Después de publicar en la página de inicio de sesión y obtener un redireccionamiento 302, la app.session
la app.session
mostró el ID de usuario del guardián.
>> app.session
{
"_csrf_token"=>"dT0/BqgLb84bnE+f1g...",
"warden.user.user.key"=>["User", [42843], "$2a$10$1OU.1BixIba..."],
"session_id"=>"0dd49c05ff4e6362c207c6eb877f86cd"
}
Pude buscar al usuario así:
>> current_user = User.find(app.session["warden.user.user.key"][1][0])
Cuando cerré la sesión y luego intenté iniciar sesión con una contraseña incorrecta, obtengo un 200 y luego la app.session pierde la información del usuario warden y solo contenía el token csrf y la identificación de la sesión como su ejemplo.
Por cierto: una vez que app.controller.current_user
sesión, app.controller.current_user
era nulo, incluso cuando el ID de usuario del guardián estaba en la sesión.
current_user
es una propiedad del controlador así que después de app.post(''/sign_in'', ...
puedes llamar a app.controller.current_user
en la consola de tus rails para obtener el objeto User