【问题标题】:restric access json data with grape and rails 3使用葡萄和rails 3限制访问json数据
【发布时间】:2013-03-13 23:10:16
【问题描述】:

我在这个地址有一个json数据:

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

这些json数据是用葡萄宝石https://github.com/intridea/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从这个地址获取数据

这是我的咖啡脚本文件:

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 类型可以访问这些数据,我不想允许用户。只能从我自己的应用程序访问我的内部搜索引擎中的这些数据。

我如何才能将数据限制为仅从葡萄访问我自己的应用程序?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby json api grape


    【解决方案1】:

    我是葡萄和 Rails 的新手,但如果您不必使用 grappa 并且可以使用 Rails,我会想到这里。

    您可以使用 Rails 检查“请求者” URL,如果它来自 yourapplication.com,则您允许访问,否则拒绝。

    【讨论】:

    • 谢谢,您能在回复中粘贴一个示例吗?我在groups.google.com/forum/#!topic/ruby-grape/ZvXBQD4bFms 上提出了同样的问题,葡萄创造者 Daniel Doubrovkine 告诉我这是不可能的。如果您可以粘贴代码解决方案会有所帮助。谢谢
    • 我在那里添加了它。有兴趣了解您决定如何解决您的问题。
    • 谢谢尤里,我已经尝试使用github.com/udzura/rack-block,但无法从本地主机获得。我不知道真实域是否需要。如果您知道带有真实示例的修复程序,那么对其他用户将非常有用。非常感谢!
    • 好的,我想到目前为止的共识是通过域进行限制是不切实际的,通过 IP 是一个好的解决方案?
    • 通过 ip 是一个不错的解决方案。所以我正在寻找这个问题的解决方案。我想这可能会限制对 url 地址上的 json 数据的访问仅限于自己的应用程序。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-06-13
    • 2013-08-21
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多