每次我尝试为Spree Commerce API设置"Access-Control-Allow-Origin"标头时,都不会为Ajax调用传递任何标头。
我目前正在扩展base_controller.rb:
文件:app/controllers/spread/api/base_controller_decorator.rb
after_filter :set_access_control_headers
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Request-Method'] = '*'
end
每次我直接从浏览器查看JSON时,都会将头添加到请求中。但是,在进行AJAX调用时没有可见的头。。。
有人能告诉我怎么做吗?有解决这个问题的方法吗?
您的应用程序控制器中不需要任何东西,而是需要一个gem:
将gem 'rack-cors', :require => 'rack/cors'
添加到Gemfile,然后添加bundle install
在config/application.rb
中,配置机架cors以接受来自任何来源的请求。它属于Application类中的任何位置。
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
origins '*'
表示您允许来自任何域的请求。如果您想限制到特定的域(即在内部打开api,但对外部用户关闭),请将'*'
更改为特定的域名。
参见https://github.com/cyu/rack-cors有关更多详细信息,