本番用の Rails 3.2 アプリが複数のドメインで実行されている状況があります。これらのドメイン間で動作するように、omniauth 認証 (バージョン 1.1.0、必要に応じてデバイス 2.1.0 も使用) をセットアップしています。残念ながら、多くの oauth プロバイダー (Facebook など) では、一度に 1 つのドメインとしか統合できないか、使用するコールバック URL をそれぞれ指定する必要があります。ドメイン名は常に追加されているため、これはこのユース ケースでは実用的ではありません。
私の解決策は、認証 URL を 1 つにすることでした。これにより、ユーザーが omniauth を使用してアフィリエイト サイトにログインしようとすると、コールバック URL が 1 つの標準 URL (つまり、auth.example.com) になります。
omniauth 統合を機能させることができ、ユーザーが auth.example.com ドメインに対して認証できるようにすることができました。次のステップは、ある種の認証キーとともに、それらを元の場所に送り返すことです。ユーザーの元の場所を特定するために使用していましたが、オプションを設定env['omniauth.origin']
して Rails サーバーを再起動すると、何らかの理由でこの変数が空白になります。OmniAuth.config.full_host
簡単に言うと、イニシャライザでenv['omniauth.origin']
使用していない限り、コールバック コントローラで問題なくアクセスできます。OmniAuth.config.full_host
ただし、それなしでクロスドメイン認証を機能させる方法がわかりません。
編集:問題を示すために小さなサンプルアプリを作成しました。config/initializers/omniauth.rb に独自の Facebook アプリの資格情報を入力する必要があります。facebook で認証すると、params と origin が適切に渡されることがわかります。ただし、config/initializers.omniauth.rb の full_host 構成オプションのコメントを外してアプリを再起動すると、Facebook で認証した後、適切な URL にリダイレクトされますが、params と元のデータは渡されなくなります。終えた。