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

Pab*_*ero 3 ruby-on-rails cors

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

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

它不仅适用于机架式.在引发异常之前,它不会响应添加的任何自定义标头.

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

XMLHttpRequest无法加载http://development.com:4000/orders/1.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http://development.com:3000 "访问.

如果我手动捕获异常rescue_from,render json: {}, status: 500它会响应标题.

jto*_*mpl 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
Run Code Online (Sandbox Code Playgroud)

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