Django と PostgreSQL にマルチテナント アプリケーションを実装しようとしていますが、テナントごとに個別の (ただし同一の) スキーマを使用しています。
次のテナント スキーマを選択します。
cursor.execute('SET search_path TO ' + schemas)
また、ホスト名に基づいて使用するスキーマを選択するミドルウェアがあるため、次のように機能します。
foo.mysite.com --> use schema 'client_moo'
bar.mysite.com --> use schema 'client_bar'
これは原則として機能します。つまり、単純なケース(単純なデータベース検索)です。
ただし、ログインしようとすると、状況が悪化し始めます。各テナントには、独自の個別のログイン ページfoo.mysite.com
が必要bar.mysite.com
ですmysite.com
。
ただし、サブドメインから管理アプリにログインしようとすると、ログイン ページにリダイレクトされます。
何が起こるかは次のとおりです。
mysite.com
正常にログインします (スキーマ:public
)foo.mysite.comn
ログインする代わりに、リダイレクト (HTTP 302) を自分自身 (foo.mysite.com
) (スキーマ:client_foo
)に戻します。
スキーマを常にあるように強制するclient_foo
と、mysite.com
機能する (つまり、client_foo
スキーマにログインする)ことになりますが、foo.mysite.com
それでも機能しません。
スキーマの選択を完全に削除すると (常にpublic
スキーマ上にあるように)、両方の URL が正常にログインできるようになります。