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

リクエストがデフォルトのAPI /コントローラーではなく「コントローラーアクションcors」を通過する理由はわかりませんが、それを行う方法は次のとおりです

#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 に答える