Я хотел просто задокументировать это здесь, на случай, если кто-то другой попытается сделать то же самое и нуждается в небольшой помощи.
В настоящее время я работаю над фронтендом на React, связанным с бэкендом Discourse и плагином, кастомизирующим некоторые функции Discourse. Я хотел настроить MessageBus для работы с моим пользовательским фронтенд-приложением, но столкнулся с проблемой CORS, так как фронтенд обслуживается с другого источника, чем Discourse.
Я заметил, что Discourse устанавливает заголовок Access-Control-Allow-Origin в значение Discourse.base_url_no_prefix для среды MessageBus, так как по умолчанию предполагается, что MessageBus будет работать с фронтендом Ember по умолчанию в Discourse.
Как описано в README репозитория MessageBus на GitHub, в среду MessageBus можно добавлять дополнительные заголовки. Именно это и делает инициализатор MessageBus в Discourse, где Access-Control-Allow-Origin устанавливается в значение Discourse.base_url_no_prefix.
Чтобы кастомизировать это, я добавил следующий код в свой плагин:
MessageBus.extra_response_headers_lookup do |env|
env["__mb"][:extra_headers].merge({
"Access-Control-Allow-Origin" => "http://your-custom-domain.com"
})
end
Это имеет преимущество в том, что не переопределяет важную логику Discourse при определении среды MessageBus, которая устанавливается вызовом setup_message_bus_env в инициализаторе Discourse, но при этом позволяет использовать пользовательские значения.
Я понимаю, что для многих разработчиков здесь такая настройка может показаться очевидной, но я решил, что стоит это задокументировать, так как не всегда легко собрать все части воедино. И если это сэкономит кому-то час времени на попытки разобраться в этом — отлично!
Очевидно, что если что-то выше указано неверно или неточно, пожалуйста, дайте мне знать, и я внесу правки!