#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