如何在引发异常时保留响应头?

时间:2014-02-05 17:30:17

标签: ruby-on-rails cors

我使用rack-cors在我们的API请求中添加CORS响应标头。

请求成功时(200)它可以正常工作。但是,当应用程序通过ActiveRecord::RecordNotFound(401)引发异常authenticate_user!(404)或devise /无效凭据时 - 它不会响应CORS响应头。

不仅仅是机架式的。在提出异常之前,它不会响应添加的任何自定义标头。

最大的问题在于客户端(浏览器),因为它不是根据状态代码显示正确的错误,而是显示:

  

XMLHttpRequest无法加载http://development.com:4000/orders/1。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://development.com:3000'因此不允许访问。

如果我手动捕获异常rescue_fromrender json: {}, status: 500,它会回复标题。

1 个答案:

答案 0 :(得分:5)

我长期与这个问题作斗争,答案是:

您设置Rack :: Cors中间件的顺序很重要。像这样使用它:

config.middleware.insert_after Rails::Rack::Logger, Rack::Cors, :logger => Rails.logger do
  allow do
    origins '*'
    resource '*', headers: :any, methods: %i[get post patch put delete options]
  end
end

更多信息:https://github.com/cyu/rack-cors/issues/33