簡體   English   中英

在機架應用程序中使用CORS和Warden(Grape API)

[英]Using CORS and Warden in rack app (Grape API)

我有一個基於Grape的API作為機架應用程序運行,它使用rack-cors允許跨域請求,並使用Warden進行身份驗證。 CORS工作正常,但在我調用env['warden'].authenticate情況下卻無法正常工作。 在這些情況下,我收到“不允許原點”響應。

我相信這是由於中間件的順序所致,但是對於機架應用程序我還是比較陌生的。 我發現一些信息描述了一個類似的問題,並給出了一個示例,說明如何使用config.middleware.insert_before Warden::Manager, Rack::Cors do ...強制執行中間件的順序,從而在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指令的順序,但是無論哪種方式,我都可以從使用warden的方法中獲得相同的“不允許原點”響應。 我的問題的部分原因是我不清楚在機架應用程序中什么決定中間件的順序。

我是否預感中間件的順序導致了此問題? 似乎我缺少基本的東西。 我想讓Rack和Warden表現出色,或者找到其他解決方案以允許CORS。 我嘗試顯式發送Access-Control-Allow-Origin標頭,但Warden似乎也將其清除。

曾經完全一樣(有點煩人)的東西,最后還是對我的東西做了:

在執行before do塊中

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

(您可能想根據RACK_ENV或類似方法進行調整...)

似乎可以工作。 請注意,這不是完整的CORS實施( 當然不是 ),但是我將等待該rack-cors寶石修復...

高溫超導

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM