加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 单个Rails路由上的Access-Control-Allow-Origi

发布时间:2020-12-17 03:10:31 所属栏目:百科 来源:网络整理
导读:在我的Rails应用程序中,我正在构建一个功能,允许用户使用 Javascript代码段从其他网站上的应用程序嵌入数据. 我的Javascript片段向我的rails应用程序中的路由发出GET请求,该路由返回原始JSON.当片段和JSON共享同一个域时,一切运行良好,但是当我将片段嵌入到
在我的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方式”来处理这个要求?

解决方法

对头部的调用将不会返回JSON by definition.当您使用head调用它时,选项哈希将被转换为标题.

可能会尝试这个,一个选项调用将根据需要提供一个空响应主体的标题.对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

另外,在rails应用程序上启用CORS的另一个选项是rack-cors,可以做你需要的而不用自己做的麻烦.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读