Eine einfache API-Authentifizierung lässt sich in ActiveAdmin durch Wiederverwendung des Standard-Admin-Users im Initializer erreichen:
# config/initializers/active_admin.rb ActiveAdmin.setup do |config| config.prepend_before_filter do if active_admin_config.namespace.name == :api authenticate_or_request_with_http_basic('API') do |name, password| user = AdminUser.find_by_email!(name) sign_in(:admin_user, user) if user.valid_password?(password) end end end
Dies erlaubt die Angabe des Benutzernamens und Passworts im Browser als Popup (HTTP-Basic-Authentication) und als Header für APIs:
curl -u admin@example.com:password http://localhost:3000/api/my_resources.json
Will man dies mit Capybara ohne JS testen, hat sich für mich der folgende Ansatz bewährt:
page.driver.browser.basic_authorize(user.email, user.password) visit api_my_resources_path
Bei anderen Treibern (zum Beispiel bei Verwendung von Javascript) kann die Schnittstelle abweichen.