HTTP-Header für Plugin in der Entwicklung hinzufügen

Situation:

Ich entwickle ein Plugin und verwende nginx als Reverse-Proxy zu Rails:3000. Alles funktioniert hervorragend, aber ich habe Probleme, auf die API zuzugreifen, weil die gefürchteten CORS-Fehler auftreten, die wir alle kennen und „lieben":

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.

Bisher habe ich versucht, Header in nginx hinzuzufügen, aber aus irgendeinem Grund erscheinen diese Header nicht in den Kopfzeilen, wenn ich in Chrome debugge.

Ich habe auch versucht, nginx zu verwenden, um die proxy_headers von Rails an nginx weiterzuleiten, aber das hat ebenfalls nicht funktioniert.

Außerdem habe ich versucht, ein Chrome-Erweiterungs-Plugin zu verwenden, um die Header einzufügen, aber auch das scheint nicht zu funktionieren, obwohl ein CORS-Test des Browsers über eine CORS-Testseite zeigt, dass alles erlaubt ist.

Dann habe ich versucht, das rack-cors-Gem hinzuzufügen, konnte aber config.middleware nicht zum Laufen bringen, weil es zu freeze-Fehlern kam.

Das hält die Entwicklung auf und es scheint, als hätte ich eine Sackgasse erreicht :frowning:

Gibt es eine Möglichkeit, diese Header direkt in Discourse in einer Konfigurationsdatei (oder besser noch im Plugin) hinzuzufügen, die verschiedene HTTP-Header sendet, die wir in der Entwicklungsumgebung testen und senden möchten?

Oder ist es möglich, das rack-cors-Gem zum Laufen zu bringen? Wenn ja, wo im Plugin würde ich den Code hinzufügen?

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

Wie erwähnt, führen die (vielen) Dinge, die ich bisher versucht habe, sowie die oben in rubydocs beschriebenen Ansätze alle zu „passiert hier nicht

Gibt es einen Grund, warum unsere Standard-CORS-Unterstützung und die Site-Einstellung cors_origins bei Ihnen nicht funktionieren?

Hi @sam

Ich weiß nicht, warum die eingebaute CORS-Unterstützung bei mir nicht funktioniert, aber ich habe viele Einträge ausprobiert, einschließlich dieser Art von Wildcard-Einträgen. Vielleicht mache ich etwas falsch?

Entschuldigung, ich habe das im OP erwähnt…

Vielleicht muss ich diese ENV-Variablen einrichten?

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

Muss ich einige ENV-Variablen setzen? Wenn ja, wo? Vielleicht liegt es daran, dass ich etwas falsch gemacht habe?

Danke!

Übrigens habe ich dies im Plugin-Initializer gesetzt:

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

und console.log zeigt, dass diese Einstellungen in Ordnung sind…… aber der gefürchtete „Access Denied“-Fehler bleibt weiterhin in der Konsole stehen :frowning: