Rails 3 - Как вы можете получить доступ к Devise current_user в консоли IRB? - PullRequest
26 голосов
/ 03 марта 2012

Я занимаюсь дизайном / отладкой в ​​IRB, и мне нужно войти в систему, чтобы пользователь мог использовать current_user в своих усилиях.

От ответа Брайана Детерлинга на другой вопрос я смог успешно войти в систему и получить доступ к ответу на странице с такой последовательностью:

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

ПРИМЕЧАНИЕ. Если вы получилиответ 200 Вы не вошли в систему. Вам нужно перенаправить 302, чтобы указать успешный вход в систему.См. Ответ Тима Сэнтефорда.

Мне удалось получить информацию о сеансе:

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

Я перепробовал все, что смог, чтобы попытаться добраться до current_user через app и app.session, но не повезло.Как я могу получить current_user?

Ответы [ 2 ]

26 голосов
/ 28 марта 2012

current_user является свойством контроллера, поэтому после app.post('/sign_in', ... вы можете вызвать app.controller.current_user в консоли rails, чтобы получить объект User

4 голосов
/ 28 марта 2012

Вполне возможно, что вы на самом деле не входите в систему. Следует иметь в виду, что Devise I основывается на Warden, который является промежуточным программным обеспечением для стойки.

Я попробовал ваш метод app.post для входа в приложение, над которым я работаю, которое использует Devise.После публикации на странице входа и получения перенаправления 302 app.session показывал идентификатор пользователя надзирателя.

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

Я смог получить пользователя следующим образом:

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

Когда я вышел из системы, а затем попытался войти в систему с неверным паролем, я получил 200, а затем приложение.В сеансе отсутствует информация о пользователе и он содержит только токен csrf и идентификатор сеанса, как в вашем примере.

Кстати: после входа в систему app.controller.current_user был равен нулю, даже когда идентификатор пользователя наблюдателя находился в сеансе.

...