我想在这里记录一下,以防其他人也想做同样的事情并需要一些指导。
我目前正在开发一个 React 前端,后端是 Discourse,并有一个插件用于自定义部分 Discourse 功能。我想让 MessageBus 与自定义前端应用配合工作,但遇到了 CORS 问题,因为前端是从与 Discourse 不同的源提供的。
我注意到 Discourse 将 Access-Control-Allow-Origin 头设置为 Discourse.base_url_no_prefix,这是针对 MessageBus 环境的,因为通常假设 MessageBus 会与 Discourse 默认的 Ember 前端配合使用。
正如 MessageBus GitHub README 中所 documented 的那样,可以为 MessageBus 环境添加额外的响应头,这正是 Discourse MessageBus 初始化器所做的,其中 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 初始化器中调用 setup_message_bus_env 确定 MessageBus 环境时,不会覆盖 Discourse 的重要逻辑,同时仍允许使用自定义值。
我意识到这个设置对这里的许多开发者来说可能显而易见,但我认为值得记录一下,因为将各个部分组合起来并不总是容易的。如果这能帮某人节省一小时的时间去弄清楚这个问题,那就太好了!
显然,如果以上内容有任何不正确或不准确的地方,请告诉我,我会进行修改!