Utiliser MessageBus avec une application frontend Discourse personnalisée sur un autre domaine

Je souhaitais simplement documenter cela ici au cas où quelqu’un d’autre essaierait de faire la même chose et aurait besoin d’un peu d’orientation.

Je travaille actuellement sur un frontend React couplé à un backend Discourse et à un plugin personnalisant certaines fonctionnalités de Discourse. Je voulais faire fonctionner MessageBus avec l’application frontend personnalisée, mais j’ai rencontré un problème CORS car le frontend est servi depuis une origine différente de celle de Discourse.

J’ai remarqué que Discourse définissait l’en-tête Access-Control-Allow-Origin sur Discourse.base_url_no_prefix pour l’environnement MessageBus, car il est naturellement supposé que MessageBus fonctionnera avec le frontend Ember par défaut de Discourse.

Comme documenté sur le README GitHub de MessageBus, il est possible d’ajouter des en-têtes supplémentaires à l’environnement MessageBus, ce que fait exactement l’initialiseur MessageBus de Discourse et où Access-Control-Allow-Origin est défini sur Discourse.base_url_no_prefix.

Pour personnaliser cela, j’ai ajouté le code suivant à mon plugin :

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

Cela présente l’avantage de ne pas remplacer la logique importante de Discourse lors de la détermination de l’environnement MessageBus, qui est établie en appelant setup_message_bus_env dans l’initialiseur de Discourse, tout en permettant des valeurs personnalisées.

Je réalise que cette configuration peut être assez évidente pour de nombreux développeurs ici, mais j’ai pensé qu’il valait la peine de la documenter car il n’est pas toujours facile de rassembler les pièces, et si cela fait gagner une heure à quelqu’un pour comprendre cela, tant mieux !

Bien sûr, si l’un des points ci-dessus est incorrect ou inexact, n’hésitez pas à me le faire savoir et je modifierai le texte !

10 « J'aime »