rails rail gema current_user create ruby-on-rails-3 session devise irb

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