2014-02-05 72 views
3

我使用rack-cors在我們的API請求中添加CORS響應標頭。如何在引發異常時保留響應標頭?

當請求成功(200)時它工作正常。但是,當應用程序通過authenticate_user!(401)引發ActiveRecord::RecordNotFound(404)或devise /無效憑證的異常時 - 它不會響應CORS響應標頭。

它不僅與機架。在引發異常之前,它不會響應添加的任何自定義頭文件。

最大的問題是在客戶端(瀏覽器),因爲代替示出基於狀態碼的適當的錯誤,它示出了:

的XMLHttpRequest不能加載http://development.com:4000/orders/1。請求的資源上沒有「Access-Control-Allow-Origin」標題。原因'http://development.com:3000'因此不允許訪問。

如果我手動發現異常rescue_fromrender json: {}, status: 500,它會響應標題。

+0

您需要啓用'CORS' 看到這個問題 http://stackoverflow.com/questions/17858178/allow-anything通過Cors政策 – OneChillDude

+0

@BrianWheeler它是由機架啓用。 –

回答

5

我與這個問題長期作戰,答案是:

在其中設置機架的次序::一個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

+0

先生,你讓我的一天! – 23tux