質問が少し古いことは知っていますが、それでも答えます。問題に直面し、OPが意図したものと同じことを達成しようとした後、私はこれを行いました
Omniauth
ミドルウェアを作成し、ミドルウェアがどのように見えるかのすぐ上に挿入しました
class OmniAuthMiddleware
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
request = Rack::Request.new(env)
if request.xhr? and status == 302 and request.path_info =~ /\/auth\/\w+\z/ and body.class == Rack::BodyProxy
location = headers["Location"]
body = ActionDispatch::Response.new
headers = {'Content-Type'=>'text/javascript; charset=utf-8'}
body.body = ["window.location.href='#{location}'"]
body.headers = headers
status = 200
end
[status,headers,body]
end
end
そして、ここでミドルウェアスタックにミドルウェアごとに挿入する方法
Rails.application.config.middleware.insert_before OmniAuth::Builder,OmniAuthMiddleware
ここに私のミドルウェアスタックがどのように見えるか
...
...
...
use Warden::Manager
use Rack::Mongoid::Middleware::IdentityMap
use ExceptionNotifier
use OmniAuthMiddleware
use OmniAuth::Builder
run PoasterApi::Application.routes
これで、私が望んでいたことを達成することができました
注: Omniauth doc で ajax に関する情報が見つかりませんでした。また、時間に追われて実行していたため、この修正を実装しました (Google 検索で適切な回答が得られなかったため)。Omniauth も ajax レスポンスをサポートしている可能性がありますが、前述のとおり、ドキュメントで見つけることができませんでした。答えは、まったく同じ機能を実装したいが、 Omniauth でそれを実現する方法がわからないユーザー向けです。
私はまだOmniauthを調べて、構成を設定/調整することでOmniauthで直接これを行う方法が存在するかどうかを確認しています
この助けを願っています