3

我在 Rails API 上实现 CORS,我基本上想要定义一个路由,上面写着“通过 OPTIONS 方法对 API 调用的所有请求都应该转到控制器操作cors”。

到目前为止我所拥有的相关部分:

# routes.rb:
scope :module => 'api', :path => 'api' do
  match '*', :action => 'cors', :constraints => { :method => 'OPTIONS' }
end

# base_api_controller.rb:
class Api::BaseApiController < ApplicationController
  def cors
    # ... setting headers of Access-Control-Allow-Origin and stuff here...
  end
end

我遇到的问题是当我通过 javascript 发出请求时,出现错误:

OPTIONS <url> Resource failed to load

看来这应该可以工作,而我只是缺少一些简单的东西。有任何想法吗?

4

1 回答 1

1

我不确定您为什么希望请求通过“控制器动作 cors”而不是默认的 api/控制器,但您可以这样做

#Gemfile
gem 'rack-cors', :require => 'rack/cors'

#config/application.rb
config.middleware.insert_before 0, "Rack::Cors" do
  allow do
    origins "*"
    resource "/api/*", :headers => :any, :methods => [:options], :action => 'cors'
  end
end

或者,我不会将其发送到不同的控制器操作,所以这实际上是我认为你想要的

#Gemfile
gem 'rack-cors', :require => 'rack/cors'

#config/application.rb
config.middleware.insert_before 0, "Rack::Cors" do
  allow do
    origins "*"
    resource "/api/*", :headers => :any, :methods => [:options]
  end
end
于 2015-08-08T15:20:46.763 回答