2015-10-12 5 views
2

Я использую grape, grape-swagger и grape-swagger-rails, чтобы настроить API для моего проекта Rails 4.2.1. Это будет внутренний API, поэтому я хочу, чтобы разработчики имели доступ к нему, но не к широкой публике. Каков наилучший способ сделать это?Требуется авторизация для документации Swagger

Моя первоначальная идея состояла в том, чтобы использовать поле api_key, которое вы можете установить в swagger-ui, но я не могу найти правильный способ доступа к нему внутри корневого API-генератора для Grape.

Я также думал, что могу попытаться смонтировать конечную точку для документации, если пользователь является администратором (мы используем Devise), но это не скрывает сама документация (если кто-то знает ссылку swagger.json).

Как люди справлялись с этой проблемой в прошлом?

ответ

0

Вы можете использовать sorcery для аутентификации, который добавляет несколько очень удобных методов (в примере ниже logged_in?) и в config/initializers/swagger.rb оных:

GrapeSwaggerRails.options.before_filter do |request| 
    unless logged_in? 
    redirect_to Rails.application.routes.url_helpers.root_path 
    end 
end 

Использование api_key также возможно. В вашем class API < Grape::API просто добавьте before блок, где следует проверить правильность значения api_key, обратившись к нему через params.

+0

На самом деле я не мог получить доступ к 'api_key' в' params' внутри инициализатора. Я не хочу объявлять его как параметр для каждого метода API. –

+0

Я не имел в виду доступ к 'api_key' в одном из ваших инициализаторов, а в блоке' before' в 'app/api/name/api.rb'. Таким образом, нет необходимости объявлять его как параметр для каждого метода API. – Brozorec