シナリオ: サブドメインとデバイスを使用するマルチテナント Rails アプリ 問題: ユーザーが mydomain.com にログインし、ログイン ユーザーとして自分の subdomain1.mydomain.com アドレスに転送できるようにしたい。現在、彼らは自分のサブドメインに直接ログインすることしかできません.
私は比較的 Rails の初心者であり、単純な解決策を見つけることができません (ただし、解決策が必要なようです)。理想的には、mydomain.com と subdomain1.mydomain.com で 1 つの Cookie を共有したいのですが、カスタム ミドルウェアを作成するスキルがありません。明らかに、マルチテナントであるため、すべてのサブドメインで 1 つのセッションを共有することはできません。これに数日間立ち往生し、OAuthまたは他のより面倒なソリューションを検討し始める前に、私が見逃している簡単なソリューション(config.session_storeドメイン設定など)があるかどうかに興味があります。どんな助けでも大歓迎です!
編集:もちろん、投稿後にこれを見つけただけです。Rails と Devise に登録した後、ユーザーをサブドメインにログインさせます。config.session_store ドメインを試してみます: :all フィルターの前に推奨事項を指定し、機能しない場合は詳細を投稿します。少なくとも良い考えのようです。
編集:サブドメイン設定を使用して特定のデバイスで機能したソリューション:
class ApplicationController < ActionController::Base
before_action :check_subdomain
def check_subdomain
unless request.subdomain == "" or request.subdomain == session[:subdomain]
redirect_to request.protocol+request.domain
end
end
end
session_store.rb
My::Application.config.session_store :cookie_store, key: '_my_session' , :domain => :all, :tld_length => 2
基本的に、ログイン時に session[:subdomain] を使用してセッションにサブドメインを設定し、それを使用してセッションを現在のユーザーにスコープします。それ以外の場合、session_store でドメインが :all に設定されていると、スコープが壊れます。ユーザーが承認されていない場合、request.protocol (http:// または https://) +request.domain リダイレクトを介して公開ホームページにリダイレクトされます。単純!これで、ユーザーは同じセッション内でベース ドメインとサブドメインの間を移動できます。