2012-03-03 7 views
26

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.Rails 3 - ¿Cómo se puede acceder al usuario_actual de Devise en la consola IRB?

De Brian Deterling de answer a otra pregunta, he podido entrar con éxito y acceder a una respuesta de la 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 se obtiene una respuesta 200 no ha iniciado sesión en Ti necesita un redireccionamiento 302 para indicar un inicio de sesión exitoso. Vea la respuesta de Tim Santeford.

he sido capaz de obtener información de la sesión:

1.9.3-p125 :009 > app.session 
=> {"_csrf_token"=>"1yAn0jI4VWzUH84PNTH0lVhjpY98e9echQGS4=", "session_id"=>"89984667d30d0fec71f2a5cbb9017e24"} 

He intentado todo lo que puedo pensar para tratar de llegar a través de current_userapp y app.session, pero no hubo suerte. ¿Cómo puedo obtener current_user?

Respuesta

26

current_user es una propiedad del controlador por lo que después app.post('/sign_in', ... puede llamar app.controller.current_user en su consola de rieles para obtener el objeto Usuario

+2

Yo lo he probado y realmente funciona. – Pierre

+1

Lo probé y current_user es nulo. Cuando hago el procedimiento de conexión descrito en la pregunta, consigo una respuesta 200 y app.session devuelve el csrf_token, así que sé que estoy conectado en Aceptar. El controlador de la aplicación responde con páginas y páginas de datos. Pero app.controller.current_user devuelve nil. Estoy usando Devise, ¿verdad? –

+0

ve como una cuestión de asignación de masas en app.post estaba causando mi nombre de no tener éxito (una respuesta 200 no es un puesto de éxito en este caso -. Muy confuso) Una vez me dieron una respuesta 302, entonces app.controller.current_user obras. No hubiera averiguado el problema de acceso sin la respuesta de Tim Santeford. –

4

Podría ser posible que usted no está realmente inicia la sesión. Una cosa a tener en cuenta es ese Devise que construyo sobre Warden, que es middleware de rack.

He intentado el método de app.post de Inicio de sesión en una aplicación que estoy trabajando en eso utiliza inventar. Después de publicar en la página de inicio de sesión y obtener un redireccionamiento 302, el 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" 
} 

tuve la oportunidad de ir a buscar el usuario así:

>> current_user = User.find(app.session["warden.user.user.key"][1][0]) 

Cuando cerrado sesión y luego trató de iniciar la sesión con una contraseña incorrecta consigo un 200 y luego el app.session falta la guarde la información del usuario y solo contenga el token csrf y la identificación de la sesión como su ejemplo.

BTW: Una vez que se haya identificado app.controller.current_user fue nula, incluso cuando el director era id de usuario en la sesión.

+0

Tim - Gracias por señalar el problema 200 vs 320. Decidí elegir la respuesta de Suguha por su simplicidad, aunque probé la tuya y también funciona. Lo siento, no puedo elegir ambos. –

+0

No hay problema. No sabía que podía iniciar sesión usando el objeto de la aplicación de esta manera antes de su pregunta, así que aprendí algo al responder. –

Cuestiones relacionadas