Volevo semplicemente documentare questo qui, nel caso qualcun altro stesse cercando di fare la stessa cosa e avesse bisogno di una piccola guida.
Attualmente sto lavorando su un frontend React accoppiato a un backend Discourse e a un plugin che personalizza alcune funzionalità di Discourse. Volevo far funzionare MessageBus con l’app frontend personalizzata, ma ho incontrato un problema CORS poiché il frontend viene servito da un’origine diversa rispetto a Discourse.
Ho notato che Discourse stava impostando l’intestazione Access-Control-Allow-Origin su Discourse.base_url_no_prefix per l’ambiente MessageBus, dato che si dà per scontato che MessageBus funzioni con il frontend Ember predefinito di Discourse.
Come documentato nella scheda README di MessageBus su GitHub, è possibile aggiungere intestazioni extra all’ambiente MessageBus, ed è esattamente ciò che fa l’inizializzatore MessageBus di Discourse, dove Access-Control-Allow-Origin viene impostato su Discourse.base_url_no_prefix.
Per personalizzarlo, ho aggiunto il seguente codice al mio plugin:
MessageBus.extra_response_headers_lookup do |env|
env["__mb"][:extra_headers].merge({
"Access-Control-Allow-Origin" => "http://your-custom-domain.com"
})
end
Questo ha il vantaggio di non sovrascrivere la logica importante di Discourse quando si determina l’ambiente MessageBus, che viene stabilito chiamando setup_message_bus_env nell’inizializzatore di Discourse, consentendo comunque valori personalizzati.
Mi rendo conto che questa configurazione possa essere piuttosto ovvia per molti degli sviluppatori qui, ma ho pensato valesse la pena documentarla, poiché non è sempre facile mettere insieme i pezzi e, se ciò risparmia a una persona un’ora di tentativi per capire come funziona, allora è ottimo!
Ovviamente, se quanto sopra è errato o impreciso, fatemelo sapere e lo correggerò!