私はレールとグレープ (api.domain.com) で書かれた API に接続する JS クライアント (app.domain.com) を持っています。CORS がセットアップされ、ログインが api.domain.com サーバーで実行されるため、2 つのドメイン間で共有 Cookie があります。
この JS アプリケーションは Spine.js を使用しているため、すべて CoffeeScript で記述されています。したがって、削除リクエストを送信するには、次を使用します。
@item.destroy
これにより、DELETE リクエストが API に送信されます。ただし、Cookie はリクエスト ヘッダーと一緒に送信されないため、上記のコード行を次のように変更する必要がありました。
$.ajax({
url: "http://api.domain.com/tasks/" + @item.id,
type: "DELETE",
crossDomain: true,
xhrFields: {
withCredentials: true
}
})
そして、これは完全に機能します。Cookieが送信され、アクションが認証されるように、リクエストに沿ってレスポンスヘッダー「Access-Control-Allow-Credentials: true」が送信されます。
ただし、この方法では、リクエストごとにコード行を作成する必要があり、非常に時間がかかり、Spine フレームワークの利点も無効になります。
jQuery でデフォルトの ajax 設定を設定して、後続のすべての ajax 呼び出しでこれらの設定が使用されるようにすることが可能であることを私は知っています。だから私は試しました:
jQuery.ajaxSetup({
headers: {
"X-Requested-With": "XMLHttpRequest",
"Access-Control-Allow-Credentials": "true"
}, crossDomain: true
});
基本的に、各 ajax 呼び出しに手動で設定するのと同じ設定です。ただし、このアプローチは機能しませんが、API に送信されたリクエストにこれらのヘッダーが含まれています (firebug を介して)。
何か不足していますか?
前もって感謝します!
ダブ