我使用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_from
和render json: {}, status: 500
,它会回复标题。
答案 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