共有が異なるサイトまたは異なるサブドメイン間で行われているかどうかに応じて、この質問に対する 2 つの回答 2番目の回答:複数の Django アプリ、共有認証
ユーザーが site1.com にアクセスしてログインします。ここで、ユーザーが site2.com にアクセスすると、そのサイトですでにログイン (認証) されているはずです。
site1.com と site2.com は、同じサーバー上の異なる Django アプリによって処理されます。
サイトが認証テーブルを含むデータベースを共有できることがわかりました。私が得られないのは、セッションデータがどのように処理されるかです。ユーザーは site1 にログインした後、site2 に移動します。ここで、彼は常に user_id の代わりに request.user = "AnonymousUser: AnonymousUser" を持っています。
ここに設定しました: https://docs.djangoproject.com/en/dev/topics/db/multi-db/ :
site1 の設定には、認証モデルとその他のデータ テーブルを含む単一のデータベースがあります。site2 の設定には 2 つのデータベースがあります。1 つは独自のデータ テーブルを持ち、1 つは user1 によって使用されます。基本的に、クラス AuthRouter をコピーし、データベース ルーターをセットアップしました。
私がやろうとしていることは不可能ですか?2 つのサイトがセッション データを共有する方法が実際にはわかりません。Django 以外に何か特別なものが必要ですか? または、これは機能するはずですか?ここにコードを含めることができますが、これに関する私の基本的な考え方が間違っている場合に問題を混乱させたくありません。
編集:これが私のセットアップです。私はローカルホストでこれを試しています。
Site1 は localhost:8080 で実行されています
site2 は localhost:8000 で実行されています
サイト 2 アプリ:
デシベルルーター.py:
class AuthRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'auth':
return 'the_ui'
return None
# same for write
def allow_syncdb(self, db, model):
if db == 'the_ui':
return model._meta.app_label == 'auth'
elif model._meta.app_label == 'auth':
return False
return None
class OtherRouter(object):
def db_for_read(self, model, **hints):
return "default"
# same for write, relation, syncdb
settings.py:
DATABASE_ROUTERS = ['site2_app.db_router.AuthRouter', 'site2_app.db_router.OtherRouter']
SESSION_COOKIE_DOMAIN = 'http://localhost:8080'
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
DATABASES = {
'default': {
# ...
},
'the_ui': {
# ...
}
}
サイト 1 アプリ:
# no router
# only single database, same as the "the_ui" used in site2
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"