2012-03-03 13 views
26

Sto facendo un po 'di progettazione/debug in IRB e devo accedere ad un utente e quindi essere in grado di usare current_user nei miei sforzi.Rails 3 - Come si può accedere a current_user nella console IRB di Devise?

Da Brian Deterling di answer a un'altra domanda, sono stato in grado di accedere con successo e accedere a una risposta della pagina con questa sequenza:

>> 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: Se si ottiene una risposta 200 non si è connessi in Te bisogno di un reindirizzamento 302 per indicare un login riuscito. Vedi la risposta di Tim Santeford.

Sono stato in grado di ottenere informazioni di sessione:

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

Ho provato tutto quello che posso pensare per cercare di arrivare a current_user via app e app.session, ma senza fortuna. Come posso ottenere current_user?

risposta

26

current_user è una struttura del controller così dopo app.post('/sign_in', ... è possibile chiamare app.controller.current_user nella vostra console rotaie per ottenere l'oggetto utente

+2

L'ho provato e funziona davvero. – Pierre

+1

L'ho provato e current_user è nullo. Quando eseguo la procedura di accesso descritta nella domanda, ottengo una risposta di 200 e app.session restituisce csrf_token, quindi so che ho effettuato l'accesso OK. app.controller risponde con pagine e pagine di dati. Ma app.controller.current_user restituisce nil. Sto usando Devise - sei tu? –

+0

Sembra che un problema di assegnazione di massa su app.post causasse il mio accesso non riuscito (una risposta di 200 non è un post di successo in questo caso - molto confuso.) Una volta ottenuta una risposta 302, funziona app.controller.current_user. Non avrei capito il problema di accesso senza la risposta di Tim Santeford. –

4

Potrebbe essere possibile che non si è realmente l'accesso. Una cosa da tenere a mente è che Devise I costruisce su Warden che è un middleware rack.

Ho provato il metodo app.post di accesso su un'applicazione a cui sto lavorando che utilizza Devise. Dopo aver pubblicato la pagina di accesso e ottenuto un reindirizzamento 302, lo app.session ha mostrato l'ID utente del direttore.

>> app.session 
{ 
"_csrf_token"=>"dT0/BqgLb84bnE+f1g...", 
"warden.user.user.key"=>["User", [42843], "$2a$10$1OU.1BixIba..."], 
"session_id"=>"0dd49c05ff4e6362c207c6eb877f86cd" 
} 

sono stato in grado di recuperare l'utente in questo modo:

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

Quando mi sono collegato fuori e poi cercato il login con un password errata ho un 200 e poi l'app.session manca la warden info utente e conteneva solo il token csrf e l'id di sessione come il tuo esempio.

BTW: una volta effettuato l'accesso a app.controller.current_user era pari a zero anche quando l'ID utente del gestore era nella sessione.

+0

Tim - Grazie per aver segnalato il problema 200 vs 320. Ho deciso di scegliere la risposta di Suguha per la sua semplicità, anche se ho provato il tuo e funziona anche. Scusa, non posso scegliere entrambi. –

+0

Nessun problema. Non sapevo che potessi accedere utilizzando l'oggetto app in questo modo prima della tua domanda, quindi imparo qualcosa rispondendo. –

Problemi correlati