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 が正常にログインできるようになります。