gpt4 book ai didi

ruby-on-rails - 单个 Rails 路线上的 Access-Control-Allow-Origin

转载 作者:行者123 更新时间:2023-12-04 06:36:45 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我正在构建一个功能,允许用户使用 Javascript 代码段将应用程序中的数据嵌入到其他站点。

我的 Javascript 片段向我的 rails 应用程序中的路由发出 GET 请求,该请求返回原始 JSON。当代码段和 JSON 共享同一个域时,一切正常,但是当我将代码段嵌入另一个站点时,我遇到了 CORS 问题。

使用解决方案 I found here ,我已经开始为 CORS 配置我的 Rails 应用程序。

在我的 application_controller.rb 中:

before_filter :add_allow_credentials_headers

def add_allow_credentials_headers
response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*'
response.headers['Access-Control-Allow-Credentials'] = 'true'
end

def options
head :status => 200, :'Access-Control-Allow-Headers' => 'accept, content-type'
end

在我的 routes.rb 中:
get 'embed_json' => 'application#options', :via => [:options]

但是,当我在浏览器中点击上述路线时,应用程序不再返回 JSON 对象——只是一个空白屏幕。

关于如何最好地处理单个 Rails 路由上的 CORS,似乎有许多相互矛盾的方法。是否有“Rails 方式”来处理此要求?

最佳答案

调用 head不会返回 JSON by definition .选项散列,当你用 head 调用它时将被转换为标题。

可以试试这个,一个 options call 将根据需要提供带有空响应正文的 header 。调用 index应该呈现 JSON 以及您在 add_allow_credentials_headers 中设置的 header 筛选。

def add_allow_credentials_headers
response.headers['Access-Control-Allow-Origin'] = request.headers['Origin'] || '*'
response.headers['Access-Control-Allow-Credentials'] = 'true'
response.headers['Access-Control-Allow-Headers'] = 'accept, content-type'
end

def options
head :ok
end

def index
# do something here that renders a JSON response
end

此外,在 Rails 应用程序上启用 CORS 的另一个选项是 rack-cors , 可能会做你需要做的事,而无需自己动手。

关于ruby-on-rails - 单个 Rails 路线上的 Access-Control-Allow-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39055622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com