Подтвердить что ты не робот

Rails 3 - Как вы можете получить доступ к Devise current_user в консоли IRB?

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

От Brian Deterling ответьте на другой вопрос, я смог успешно войти в систему и получить доступ к ответу страницы с помощью этой последовательности:

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

4b9b3361

Ответ 1

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

Ответ 2

Возможно, вы действительно не входите в систему. Одна вещь, о которой нужно помнить, это то, что Devise я строю поверх 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, а затем в app.session отсутствует информация пользователя warden и содержит только токен csrf и идентификатор сеанса, как ваш пример.

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