11

我正在使用 rack-cors gem 在我的 rails 应用程序中实现 CORS,但我不确定如何为不同的来源定义不同的资源。

我需要这样的东西:

config.middleware.insert_before 0, Rack::Cors do

  allow do
    origins 'http://localhost:3000'
    resource '/api/*', headers: :any, methods: [:get, :post, :options, :put, :delete]
  end

  allow do
    origins 'http://localhost:6000'
    resource '*', headers: :any, methods: [:get, :post, :options, :put, :delete]
  end

end

因此它将允许“ http://localhost:3000 ”仅访问“/api/*”并允许“ http://localhost:6000 ”访问所有。可能吗?

上面的代码是正确的代码/语法吗?

谢谢。

4

2 回答 2

16

我知道这有点老了,但对于那些发现这个问题的人,我只用 Rails 5.1.4 api 解决了这个问题

-

起源

ENV['CORS_ORIGINS'] = 'https://domain.first.com, http://another.origin.io'

科尔斯

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins ENV['CORS_ORIGINS'].split(',').map { |origin| origin.strip }

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end
于 2018-03-29T07:36:24.460 回答
7

经过检查和测试,结果证明它是正确的语法。您可以根据需要添加任意数量的块:

allow do
    origins '[the domain]'
    resource '[the resource/directories]', headers: :any, methods: [:get, :post, :options, :put, :delete]
end
于 2017-02-21T06:11:54.497 回答