Django2: Как поделиться «request.user» с localhost: 8000 и subdomain analysis.localhost: 8000? - PullRequest
0 голосов
/ 26 сентября 2019

Я создаю блог, используя Django, и я внедрил инструмент анализа, который позволяет мне отображать подробную информацию о моих посетителях (country_origin, device, browser, ...).

анализ.localhost: 8000 - это поддомен localhost , определенный как представление на основе классов с пользовательским Mixin SuperuserAccessRequired , который возвращает 401 Unauthorized , если пользовательне персонал (я использую django-hosts для обработки поддоменов, и я впервые работаю с поддоменами.).

Моя проблема:

, если я вошел в системуна localhost: 8000 и перейдите к analysis.localhost: 8000 я получаю 401 ответ .

You are seeing this as:  AnonymousUser # generated by print(You are seeing this as: ', request.user) from SuperuserAccessRequired
Unauthorized: /
[25/Sep/2019 13:14:03] "GET / HTTP/1.1" 401 89

мое скромное предположение говоритчто localhost: 8000 и x.localhost: 8000 не разделяют определенные переменные.

Как я могу исправить эту проблему, я прочитал документацию django-hosts, например 5уже раз, и я не могу найти то, что мне не хватает

мой сотрудникde:

project / root / settings.py

...
ALLOWED_HOSTS = ['localhost']
ALLOWED_HOSTS += ['analysis.localhost', 'blog.localhost']

SITE_ID = 1

INSTALLED_APPS += [
    # Django Apps

    'blog',
    'analysis',
]

INSTALLED_APPS += [
    # Django Dependencies

    'sass_processor',
    'django_hosts',
]


MIDDLEWARE = [
    'django_hosts.middleware.HostsRequestMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'analysis.middleware.TrackVisitorMiddleware',
    'django_hosts.middleware.HostsResponseMiddleware',
]

ROOT_URLCONF = 'root.urls'
ROOT_HOSTCONF = 'root.hosts'
BLOG_URLCONF = 'blog.urls'
ANALYSIS_URLCONF = 'analysis.urls'
DEFAULT_HOST = 'www'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'analysis': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'analysis_db.sqlite3'),
    }
}

...

project / root / hosts.py

host_patterns = patterns('',
    host(r'localhost:8000', settings.ROOT_URLCONF, name='www'),
    host(r'analysis.localhost:8000', settings.ANALYSIS_URLCONF, name='analysis'),
    host(r'blog.localhost:8000', settings.BLOG_URLCONF, name='blog'),
)

Пользовательский миксин:

class SuperuserAccessRequired(AccessMixin):
    """Verify that the current user is staff."""
    def dispatch(self, request, *args, **kwargs):
        print('You are seeing this as: ', request.user)
        if not request.user.is_staff:
            return HttpResponse(status=401, content='You are not authorized to view this page.')
        return super().dispatch(request, *args, **kwargs)

ОБНОВЛЕНИЕ

Если я удаляю номер порта из analysis.localhost , я перенаправляюсь на страницу Apache по умолчанию ... странно.(просто отмените это обновление, которое я забыл о / etc / hosts, человек, которого я теряю)

ОБНОВЛЕНИЕ 2

Копаем глубже в вопросе, похоже, что я долженпереписать мой SessionMiddleware.

Буду признателен за любую помощь / руководство.

1 Ответ

0 голосов
/ 26 сентября 2019

Вам необходимо установить SESSION_COOKIE_DOMAIN для совместного использования cookie между поддоменами.

SESSION_COOKIE_DOMAIN = '.localhost'
SESSION_COOKIE_NAME = 'sharesession'

Подробнее см. SESSION_COOKIE_DOMAIN https://docs.djangoproject.com/en/1.11/ref/settings/#session-cookie-domain

...