У меня есть API, который требует аутентификации, созданный с использованием Rails 5. Основной поток аутентификации состоит в том, что пользователь выполняет вход в систему с именем пользователя / паролем в кодированном Base64 заголовке Authorization: Basic
вместе с ключом API. Затем он обменивается на токен авторизации, который записывается в таблицу базы данных пользователей и действует в течение некоторого периода времени. Последующие вызовы API требуют этот токен в заголовке Authorization: Bearer
.
Проблема, с которой я столкнулся, заключается в том, что, когда я пытаюсь протестировать контроллер, требующий аутентификации, мне приходится проходить через этот танец регистрации пользователя (чтобы убедиться, что auth_token
находится в тестовой базе данных таблица, так как это может быть первый тест, который выполняется, и т.д. ...) Это сложно, потому что, если, например, я тестирую контроллер с именем RecipesController
, а моя аутентификация живет в AuthController
, мне нужно переключить контроллеры, чтобы выполнить вход в систему.
Я успешно делал это в прошлом в spec_helper.rb
, используя что-то вроде:
def login username, password
current_controller = @controller
... setup login call ...
post :login
@controller = current_controller
... return auth token ...
end
Однако, как я понял в Почему параметры не передаются в моем тесте в Rails 5? , я считаю, что это портит мой тестовый запрос, и в результате параметры теряются.
Это похоже на довольно простой шаблон для использования, поэтому мне интересно, как это проверить? На самом деле я бы предпочел проверить аутентификацию отдельно и просто передать имитируемый пользовательский объект, но я не уверен, как это сделать, поскольку я не так знаком с Rails, как хотелось бы.