2012-03-03 4 views
26

Zajmuję się projektowaniem/debugowaniem w IRB i potrzebuję zalogować się do użytkownika, a następnie móc korzystać z current_user w moich wysiłkach.Szyny 3 - Jak uzyskać dostęp do urządzenia bieżącego Devise w konsoli IRB?

Od Brian Deterling na answer do innego pytania, udało mi się pomyślnie zalogować się i uzyskać dostęp do odpowiedzi strony z tej sekwencji:

>> 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 

. Uwaga: Jeśli pojawi się odpowiedź 200 Nie jesteś zalogowany w was potrzebujesz przekierowania 302, aby wskazać pomyślne logowanie. Zobacz odpowiedź Tima Santeforda.

byłem w stanie uzyskać informacje o sesji:

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

Próbowałem wszystkiego można myślę, aby spróbować dostać się do current_user poprzez app i app.session, ale bez powodzenia. Jak mogę uzyskać current_user?

Odpowiedz

26

current_user jest właściwością regulatora więc po app.post('/sign_in', ... można nazwać app.controller.current_user w konsoli szyn, aby uzyskać obiekt użytkownika

+2

Próbowałem już, i to faktycznie działa. – Pierre

+1

Próbowałem, a current_user jest zerowe. Kiedy wykonuję procedurę logowania opisaną w pytaniu, otrzymuję odpowiedź 200, a app.session zwraca csrf_token, więc wiem, że jestem zalogowany. app.controller odpowiada stronami i stronami danych. Ale app.controller.current_user zwraca zero. Używam Devise - jesteś? –

+0

Wygląda na to, że problem z przydziałem mas na app.post spowodował, że mój login się nie powiódł (200 odpowiedzi nie jest udanym postem w tym przypadku - bardzo mylącym). Kiedy otrzymałem odpowiedź 302, działa app.controller.current_user. Nie znalazłbym problemu z logowaniem bez odpowiedzi Tima Santeforda. –

4

to może być możliwe, że nie są naprawdę zalogowaniu. Jedną z rzeczy, należy pamiętać, że Devise buduję na Warden, który jest oprogramowaniem pośredniczącym w szafie.

Próbowałem Twojej app.post metody logowania do aplikacji, nad którą pracuję, która używa Devise. Po umieszczeniu na stronie logowania i uzyskaniu przekierowania 302, app.session pokazał identyfikator użytkownika strażnika.

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

udało mi się pobrać użytkownikowi takiego:

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

Kiedy wylogować, a następnie próbował zalogować się ze złym hasłem dostaję 200, a następnie app.session brakuje Warden użytkownika i tylko zawierał token csrf i identyfikator sesji, jak na przykład.

BTW: Po zalogowaniu app.controller.current_user był zerowy, nawet gdy identyfikator użytkownika strażnika był w sesji.

+0

Tim - Dziękujemy za wskazanie numeru 200 do 320. Postanowiłem wybrać odpowiedź Suguha ze względu na jej prostotę, chociaż testowałem twoją i to też działa. Niestety nie mogę wybrać obu. –

+0

Bez problemu. Nie wiedziałem, że możesz zalogować się przy użyciu tego obiektu aplikacji przed tym pytaniem, więc uczę się czegoś, odpowiadając. –