2017-02-27 16 views
0

APIエンドポイントにGETリクエストを送信する際に問題が発生しているようです。レールの裏側で何らかのセキュリティが働いていることがわかっています。私はReact-Railsを使っていて、私のcomponentDidMountではAPIエンドポイントへのajax呼び出しを行っています。私はX-Auth-Tokenを私のヘッダーにも入れています。Ajax APIエンドポイントでCORSの問題が発生しました。

マイコンソールエラー:

XMLHttpRequest cannot load "/api/end/point..." Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:3000 ' is therefore not allowed access. The response had HTTP status code 401.

私のAJAX呼び出しがあなたのフロントエンドが任意の起源(すべてのクライアント)からの要求を行いますので、あなたが任意の起源からCORSを有効にする必要が

$.ajax({ url: "my/api/endpoint...", headers: {"X-Auth-Token": "My API token..."}, 
    success: (response) => { console.log(response); } }) 

答えて

0

のように探しています。試してみてください

# config/initializers/cors.rb 
Rails.application.config.middleware.insert_before 0, Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', 
     headers: :any, 
     methods: [:get, :post, :put, :patch, :delete, :options, :head] 
    end 
end 

これをレール5 apiアプリケーションで使用します。レール5の前にrack-corsの宝石をGemfileに追加してください。とにかく、サーバーを再起動します。

レール3/4

# config/application.rb 
module YourApp 
    class Application < Rails::Application 

    config.middleware.insert_before 0, "Rack::Cors" do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :options] 
     end 
    end 
    end 
end 
+0

おかげウルサスは、私は、ラックCORSの宝石、あなたは運上記と依然として記述されたコードを追加しました。私のprotect_from_forgeryには::null_sessionもあります。これは、私のapplication_controllerで重要です。他に何が間違っているのでしょうか? – John

+0

私はレール3/4の答えを更新しました。それを試して、サーバーを再起動してください。 – Ursus

+0

私はレール5を使用していますが、サーバーを再起動しても運が悪いことはありません。 「XMLHttpRequestはhttp:// api/end/point ...(私のapiエンドポイント)を読み込めません。プリフライトリクエストへの応答はアクセスコントロールのチェックを通過しません:いいえ 'Access-Control-Allow-Origin'ヘッダーHTTPのステータスコードは401です。 "http:// localhost:3000"のアクセスは許可されていません。ありがとう! – John

関連する問題