Rails - 複数のトップレベル ドメインと単一のセッション/Cookie

概要

かなり長い間これに苦労してきましたが、できませんでした 解答を見つける。ユーザーが複数のトップレベルを表示できるようにする必要があります 1 回のログインで複数のドメインにアクセスできます。

私の理解では、これはenvironment.rbで設定する必要があるということです。 before_dispatch で呼び出されます。これが私が思いついたものです:

require 'activesupport'
require 'dispatcher'
module ActionController
   class Dispatcher

      def set_session_domain
         ActionController::Base.session_options.update :session_domain => "#{@request.host}"
      end 

      before_dispatch :set_session_domain
   end
end

ただし、値を取得しようとすると、これは機能していないようです セッション[:session_domain]から。

ご協力をよろしくお願いいたします。

解決策

これは少し難しいです。 Cookie は現在のドメイン (“forms.example.com” など) と親ドメイン (“.example.com”、“.com” ではない) にのみ割り当て (および取得) できますが、他のドメインには割り当てられません。 (「othersite.com」)、別の解決策を見つける必要があります。これは Rails とは関係ありませんが、Cookie がどのように機能するかに関係します。

編集: セッションは、Cookie に保存されているクライアント固有のハンドルに依存しているため、セッションはクロスドメインでも機能しません。

このサイトには、クロスドメイン Cookie を作成するための可能な解決策が 1 つあります。これは、セキュリティに多少の影響を与える可能性がありますが、私が知る限り最もクリーンな方法です。より複雑なバージョンでは、サーバーが何らかの安全なチャネルを通じて直接通信します。

より汎用的なシングル ログイン サービスを探している場合は、何らかの形式の OpenID を実装してみてください。