開発中のプラグインへのHTTPヘッダーの追加

状況:

プラグインを開発中で、nginx を Rails:3000 へのリバースプロキシとして使用していますが、すべてうまくいっているにもかかわらず、API へのアクセスで誰もが「愛する」嫌な CORS エラーに直面しています。

Access to XMLHttpRequest at 'blah blah blah' from origin 'foo bar bing' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

これまでに、nginx にヘッダーを追加しようとしましたが、何らかの理由で、Chrome でデバッグした際にそれらのヘッダーが表示されません。

また、Rails の proxy_headers を nginx に変更するために nginx を使用しようとしましたが、これも成功しませんでした。

さらに、ヘッダーを挿入するための Chrome 拡張機能プラグインを使用してみましたが、ブラウザの CORS テストサイトで CORS テストを行った結果、すべて許可されていると表示されているにもかかわらず、これも機能しません。

その後、rack-cors gem を追加しようとしましたが、freeze エラーのため config.middleware が機能しませんでした。

これで開発が停滞しており、行き詰まったようです :frowning:

Discourse の設定ファイル(できればプラグイン内)で直接これらのヘッダーを追加し、開発環境でテストおよび送信したい HTTP ヘッダーを送信する方法はありませんか?

あるいは、rack-cors gem を機能させることは可能でしょうか?可能であれば、プラグインのどこにコードを追加すればよいでしょうか?

参考: RubyDoc.info: File: README – Documentation for rack-cors (0.4.0) – RubyDoc.info

前述の通り、これまでに試した多くの方法や上記の RubyDocs に記載された方法はいずれも「ここでは機能しない」という結果に終わり、同じことの繰り返しです。

一時的に CORS を忘れ、単一の HTTP キャッシュヘッダーを追加しようとしましたが、これも私の側では行き詰まりました。

おそらく、誰もがこれらの CORS 関連の問題を笑い飛ばすでしょうし、私も同様です。しかし、もし開発テスト環境で独自のテストヘッダー(CORS かどうかは問いません)を追加する方法を共有していただければ、大変感謝いたします。

ありがとうございます。

標準の CORS サポートと cors_origins サイト設定が機能していない理由がありますか?

こんにちは、@sam さん

CORS サポートのビルド機能が私の環境で動作しない理由がわかりません。```
ワイルドカード


![Screen Shot 2020-05-18 at 12.54.18 PM|690x241](upload://fG5TXDNsJaEipHBbfIoNTWj7iCw.jpeg)

すみません、これは最初の投稿(OP)で触れていました……

もしかして、この ENV を設定する必要があるのでしょうか?

  if env['REQUEST_METHOD'] == ('OPTIONS') && env['HTTP_ACCESS_CONTROL_REQUEST_METHOD']
    return [200, Discourse::Cors.apply_headers(cors_origins, env, {}), []]
  end

何か ENV 変数を設定する必要があるのでしょうか?もしそうなら、どこで設定すればよいのでしょうか?もしかしたら私の失敗なのでしょうか?

ありがとうございます!

参考までに、プラグインのイニシャライザーで以下を設定しました:

Discourse.SiteSettings.discourse_enable_cors = true;
Discourse.SiteSettings.discourse_cors_origin = "*";

そして、console.log で確認すると、これらの設定は問題ないようですが……それでもコンソールには相変わらず「アクセス拒否」のエラーが表示されたままです :frowning: