Cam*_*ott 5 ruby-on-rails cors ruby-on-rails-4
在我的Rails应用程序中,我正在构建一个功能,允许用户使用Javascript代码段从其他网站上的应用程序嵌入数据.
我的Javascript片段向我的rails应用程序中的路由发出GET请求,该路由返回原始JSON.当片段和JSON共享同一个域时,一切运行良好,但是当我将片段嵌入到另一个站点时,我遇到了CORS问题.
使用我在这里找到的解决方案,我已经开始为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
Run Code Online (Sandbox Code Playgroud)
在我的routes.rb:
get 'embed_json' => 'application#options', :via => [:options]
Run Code Online (Sandbox Code Playgroud)
但是,当我在浏览器中点击上述路径时,应用程序不再返回JSON对象 - 只是一个空白屏幕.
关于如何在单个Rails路由上最好地处理CORS似乎存在许多相互矛盾的方法.有没有"Rails方式"来处理这个要求?
根据定义,调用head不会返回 JSON 。当您调用它时,选项哈希将被转换为标头。head
可以尝试这个,options调用将根据需要提供标头和空响应正文。调用index应该呈现 JSON,以及您在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'
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
Run Code Online (Sandbox Code Playgroud)
此外,在 Rails 应用程序上启用 CORS 的另一个选项是rack-cors,它可以满足您的需要,而无需您自己动手。
| 归档时间: |
|
| 查看次数: |
3488 次 |
| 最近记录: |