gpt4 book ai didi

ruby-on-rails - 引发异常时如何保留响应 header ?

转载 作者:行者123 更新时间:2023-12-04 06:34:50 26 4
gpt4 key购买 nike

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

请求成功 (200) 时它工作正常。但是当应用程序引发异常时 ActiveRecord::RecordNotFound (404) 或 devise/invalid credentials through authenticate_user! (401) - 它不响应 CORS 响应 header 。

它不仅适用于 rack-cors。在引发异常之前,它不会响应添加的任何自定义 header 。

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

XMLHttpRequest cannot load http://development.com:4000/orders/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://development.com:3000' is therefore not allowed access.

如果我手动捕获异常 rescue_fromrender json: {}, status: 500 它会用 header 响应。

最佳答案

我和这个问题斗争了很长时间,答案是:

设置 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

关于ruby-on-rails - 引发异常时如何保留响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com