Ограниченный доступ к данным json с помощью винограда и рельсов 3

У меня есть данные json по этому адресу:

http://localhost:3000/api/v1/apisearch

Эти данные json генерируются с помощью гем-файла винограда https://github.com/inridea/grape:

class API_v1 < Grape::API
  version 'v1', :using => :path, :vendor => 'myapp', :format => :json
    get :apisearch do
      Object.search({query: "*#{params[:q]}*"}).map{ |object| {id: object.title, text: object.description } }
    end
 end

У меня есть поисковая система, которая получает данные с этого адреса с помощью select2.

Это мой файл coffescript:

jQuery ->
  $('#query_txt').select2
    width: 'resolve'
    allowClear: true
    minimumInputLength: 2
    ajax:
      url: "api/v1/apisearch"
      dataType: 'json'
      data: (term, page) -> {q: term}
      results: (data, page) ->
        results: data

Скрипт работает очень хорошо, но я хотел бы защитить этот адрес от внешних запросов.

Я не хочу разрешать пользователю, если тип http://localhost:3000/api/v1/apisearch может получить доступ к этим данным. Доступ к этим данным может получить только моя внутренняя поисковая система из моего собственного приложения.

Как я могу ограничить доступ к данным только для моего собственного приложения из винограда?

Спасибо


person hyperrjas    schedule 13.03.2013    source источник


Ответы (1)


Я новичок в винограде и Rails, но вот что пришло мне на ум, если вам не нужно использовать граппу и вы можете использовать Rails.

Вы можете проверить URL-адрес «запрашивающего» с помощью Rails, и если он исходит от yourapplication.com, вы разрешаете доступ, в противном случае отказываете.

person Yuri    schedule 16.03.2013
comment
Спасибо, вы можете вставить пример в свой ответ? Я задал этот же вопрос на groups.google.com/forum/# !topic/ruby-grape/ZvXBQD4bFms и Даниэль Дубровкин, создатель винограда, говорят мне, что это невозможно. Если вы можете вставить решение кода, было бы полезно. Спасибо - person hyperrjas; 17.03.2013
comment
Я добавил его туда. Было бы интересно узнать, как вы решили решить свою проблему. - person Yuri; 26.03.2013
comment
Спасибо, Юрий, я пробовал с github.com/udzura/rack-block, но это невозможно с локального хоста. Я не знаю, требуется ли это с реальным доменом. Если вы знаете исправление с реальным примером, это будет очень полезно для других пользователей. Большое спасибо! - person hyperrjas; 26.03.2013
comment
Хорошо, я полагаю, что консенсус пока таков, что нецелесообразно ограничивать через домен, а через IP - нормальное решение? - person Yuri; 28.03.2013
comment
Через ip нормальное решение. Поэтому я ищу решение этой проблемы. Я предполагаю, что можно ограничить доступ к данным json по URL-адресу только для собственного приложения. Спасибо! - person hyperrjas; 28.03.2013