Я использую authlogic для аутентификации пользователей. В моих контроллеров я использую CURRENT_USER, определенный (как описано) следующим образом:Определение current_user с declarative_authorization и authlogic
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
Я также использую declarative_authorization для управления правами текущего пользователя. Все работает нормально в обычном сценарии выполнения, но когда я создаю функциональные тесты, которые используют запросы запроса, такие как «get_with», current_user в контроллере равен нулю. Я просмотрел тестовый вспомогательный код declarative_authorization и обнаружил, что в этом сценарии атрибут declarative_authorization фактически хранит текущего пользователя в Authorization.current_user (который, в свою очередь, принадлежит Thread.current ["current_user"]). Таким образом, похоже, что существует довольно сложная смесь того, как текущий пользователь обрабатывается в разных сценариях.
Мой вопрос: каков подходящий способ нахождения current_user как в обычном режиме выполнения, так и в тестовом сценарии?
Да, я попробовал это. Но это наоборот: в функциональном тесте Authorization.current_user содержит правильного пользователя, но c.current_user == nil. Поэтому этот оператор не будет работать ... –
Один вопрос: как вы поддерживаете сеанс пользователя в тестах? Попробуйте отладить сеанс, возможно, он по-прежнему сохраняется по какой-то причине. –
Насколько я могу судить, чтобы войти в систему с помощью authlogic, вы должны создать его сеанс через UserSession.create (user (: admin)), а затем будет работать текущий пользователь authlogic. – Draiken