クロスオリジンリクエストを許可するためにrack-corsを使用し、認証のためにWardenを使用して、ラックアプリケーションとして実行されているブドウベースのAPIがあります。CORS は期待どおりに動作しますが、呼び出す場合は動作しませんenv['warden'].authenticate
。これらの場合、「オリジンが許可されていません」という応答が返されます。
これはミドルウェアの順序によるものだと思いますが、私はラック アプリケーションに比較的慣れていません。ミドルウェアの順序を強制することにより、Railsでこれを機能させる方法の例で同様の問題を説明する情報を見つけましconfig.middleware.insert_before Warden::Manager, Rack::Cors do ...
たが、Rails以外の同等のものは知りません。
以下は、 my の簡略化された概算です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-cors と Warden がうまくプレイできるようにするか、CORS を許可する別の解決策を見つけたいと思います。Access-Control-Allow-Origin ヘッダーを明示的に送信しようとしましたが、Warden もそれを一掃しているようです。