2013-08-04 16 views
2

我有一個基於葡萄的API作爲機架應用程序運行,使用rack-cors來允許跨源請求和Warden進行身份驗證。 CORS正在按預期工作,但在我調用env['warden'].authenticate的情況下不會。在這些情況下,我得到了「不允許來源」的迴應。在機架應用程序(葡萄API)中使用CORS和守望者

我相信這是由於中間件的順序,但我對機架應用程序來說還是比較新的。 I found some information描述了一個類似的問題,通過使用config.middleware.insert_before Warden::Manager, Rack::Cors do ...來強制中間件的順序,但是我不知道非Rails等價物,該例子說明了如何在Rails中進行這項工作。

以下是我的config.ru的簡化近似:

require File.expand_path('../application', __FILE__) 

use Warden::Manager do |manager| 
    manager.default_strategies :password 
end 

use Rack::Cors do 
    allow do 
     origins '*' 
     resource '/*', :headers => :any, :methods => [:get, :post, :options, :put] 
    end 
end 

run application 

我試着調換use指令的順序,但無論哪種方式,我得到同樣的「出身不允許」從使用監獄長方法響應。我的部分問題是,我不清楚什麼決定了機架應用中的中間件的順序。

我的直覺是中間件的順序是否導致這個問題可行?似乎我錯過了一些基本的東西。我想讓機架和監視器玩得很好,或者找到另一種允許CORS的解決方案。我試着明確發送Access-Control-Allow-Origin標題,但Warden似乎也抹去了這一點。

回答

0

當初一模一樣(相當惱人)的thingie,結束了做我這一個:

一個before do塊,

header 'Access-Control-Allow-Origin', '*' 
header 'Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT' 

(您可以根據RACK_ENV或這樣來調整...)

似乎工作。請注意,這不是一個完整的CORS實現(of course its not),但我會等待rack-cors寶石修復...

HTH