Как использовать механизм сеансов Django с поддоменами?

#python #django #django-sessions

#python #django #django-сеансы

Вопрос:

Мне нужно получить доступ к пользователю sessionid из поддомена на моем сайте, чтобы я мог включить «единый вход», но, похоже, я не могу заставить его работать, несмотря на изменения SESSION_COOKIE_DOMAIN = '.localtest' в моих настройках.

MRE

Вам нужно изменить /etc/hosts , чтобы включить localtest , если вы хотите воспроизвести ошибку. Также обратите внимание, что это тестируется только на macOS, поэтому YMMV.

urls.py:

 from django.contrib.auth import views
from django.contrib.auth.decorators import login_required
from django.urls import path

@login_required
def home_view(request):
    raise Exception('user was logged in')

urlpatterns = [
    path('login', views.LoginView.as_view(), name='login'),
    path('home', home_view, name='home'),
]
  

settings.py:

 BASE_DOMAIN = 'localtest'
SESSION_COOKIE_DOMAIN = '.'   BASE_DOMAIN
LOGIN_URL = '/login'
LOGIN_REDIRECT_URL = '/home'
  

Когда я пытаюсь войти в систему пользователя через встроенный LoginView , вход в систему выполняется успешно, и пользователь перенаправляется на /home (который находится в том же домене, что и логин). После перенаправления входа в систему сеанс пользователя отбрасывается, а login_required триггеры отправляют пользователя обратно на страницу входа.

Почему это происходит? Это ошибка, или я что-то упускаю?

Если вы хотите воспроизвести это на своей машине, вот репозиторий. В базе данных установлен тестовый пользователь с именем пользователя root и паролем root