Verwendung von MessageBus mit einer benutzerdefinierten Discourse-Frontend-App auf einer anderen Origin

Ich wollte dies hier einfach dokumentieren, falls jemand anderes dasselbe versucht und eine kleine Anleitung benötigt.

Ich arbeite derzeit an einem React-Frontend in Kombination mit einem Discourse-Backend und einem Plugin, das einige Discourse-Funktionen anpasst. Ich wollte MessageBus mit der benutzerdefinierten Frontend-App zum Laufen bringen, stieß jedoch auf ein CORS-Problem, da das Frontend von einer anderen Ursprungsadresse als Discourse bereitgestellt wird.

Mir ist aufgefallen, dass Discourse den Header Access-Control-Allow-Origin für die MessageBus-Umgebung auf Discourse.base_url_no_prefix setzt, da natürlich davon ausgegangen wird, dass MessageBus mit dem Standard-Ember-Frontend von Discourse arbeitet.

Wie im MessageBus GitHub-Readme dokumentiert, ist es möglich, der MessageBus-Umgebung zusätzliche Header hinzuzufügen. Genau das tut der Discourse MessageBus-Initialisierer, und dort wird Access-Control-Allow-Origin auf Discourse.base_url_no_prefix gesetzt.

Um dies anzupassen, habe ich folgenden Code zu meinem Plugin hinzugefügt:

  MessageBus.extra_response_headers_lookup do |env|
    env["__mb"][:extra_headers].merge({
      "Access-Control-Allow-Origin" => "http://your-custom-domain.com"
    })
  end

Dies hat den Vorteil, dass keine wichtigen Discourse-Logiken bei der Bestimmung der MessageBus-Umgebung überschrieben werden, die durch den Aufruf von setup_message_bus_env im Discourse-Initialisierer festgelegt wird, während gleichzeitig benutzerdefinierte Werte ermöglicht werden.

Mir ist bewusst, dass diese Einrichtung für viele Entwickler hier offensichtlich sein mag, aber ich hielt es für erwähnenswert, dies zu dokumentieren, da es nicht immer einfach ist, die Teile zusammenzufügen. Wenn dies einer Person eine Stunde Zeit spart, dies herauszufinden, ist das großartig!

Offensichtlich, falls irgendetwas oben falsch oder ungenau ist, lass es mich bitte wissen, und ich werde es bearbeiten!

10 „Gefällt mir“