6

私はbackbone.jsとRailsバックエンドを使用するPhonegapアプリを構築しています。新しいユーザーを作成しているときに、CORS関連のエラーが発生します。

PhoneGap Webアプリをhttp://0.0.0.0:8000($ python -m SimpleHTTPServer)で実行し、Railsアプリをwebrick on http://0.0.0.0:3000($ rails server)で実行しています。

このようなバックボーンで新しい「スポット」を作成しようとすると、問題が発生します(chrome jsコンソール)。

> s = new App.Models.Spot()
(creates Spot)
> s.save()
(returns error Object)
OPTIONS http://0.0.0.0:3000/spots.json 404 (Not Found) jquery-1.8.2.js:8416
XMLHttpRequest cannot load http://0.0.0.0:3000/spots.json. Origin http://0.0.0.0:8000 is not allowed by Access-Control-Allow-Origin.

これが私のアプリケーションコントローラーです。

def set_access_control_headers
  headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000'
  headers['Access-Control-Request-Method'] = 'POST, GET'
end

私は多くの記事を読みました、そして私が得ることができた最も遠いのはこれを含むように私のroutes.rbを修正したときでした:

match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}

そして私のapplication_controller.rbで

def cor
  headers["Access-Control-Allow-Origin"] = "*"
  headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE OPTIONS}.join(",")
  headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",")
  head(:ok) if request.request_method == "OPTIONS"
end

ルートと'cor'メソッドを追加すると、保存を行うことができますが、レコードを削除するときに同じエラーが発生します。

CORSの基本的な考え方を理解しました。リクエストの発信元のドメインとは異なるドメインのサーバーにアクセスできません。しかし、Rails、Backbone、Phonegapを使用してこれをどのように正確に設定するかは、私にはわかりません。どんな助けでも素晴らしいでしょう、ありがとう!

4

1 に答える 1

2

私はこの記事(セクション「Rails の CORS」) に従っていますが、うまくいきました。

に変更if request.method == :optionsif request.method == 'OPTIONS'、メソッド PUT、DELETE を に追加しheaders['Access-Control-Allow-Methods']ます。「*」の代わりに、Access-Control-Allow-Originlocalhost:8080 があります (nginx でアプリを実行しています)。

これが役立つことを願っています。

PD: アプリケーション コントローラーにフィルター (フック) はありますか?

于 2012-12-19T16:19:32.437 に答える