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.