Совместное использование сеанса между разными доменами верхнего уровня с пользовательским промежуточным ПО в Django - PullRequest
0 голосов
/ 21 марта 2019

У меня есть 3 разных TLD, использующих один проект django. Чтобы помочь справиться с несколькими доменами, я использую django-hosts. Что касается содержания и функций сайтов, существует сайт для персонала (staff.com), который специально используется издателями для публикации и управления контентом, в основном он похож на сайт администратора, хотя и гораздо более удобный для пользователя. Тогда есть 2 разных сайта для клиентов, скажем, musicstuff.com и videostuff.com. Эти два приложения используют несколько приложений, таких как блог, форумы, контентные страницы и т. Д. Поскольку все три сайта используют разные домены, мне нужно найти способ работы с сеансами. Он должен иметь единую страницу входа с возможностью совместного использования файлов cookie между всеми сайтами и их соответствующими поддоменами. У меня есть следующее пользовательское промежуточное ПО:

from django.conf import settings

class CrossDomainSessionMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

        response = self.get_response(request)

        if response.cookies:
            host = request.get_host()

            if host not in settings.SESSION_COOKIE_DOMAIN:

                if host in settings.ALLOWED_HOSTS:

                    domain = '{domain}'.format(domain=host)

                    for cookie in response.cookies:
                        if 'domain' in response.cookies[cookie]:
                            response.cookies[cookie]['domain'] = domain

        return response

Цель состоит в том, чтобы заменить домен в куки-файле доменом из используемого сайта, который должен быть указан в настройках ALLOWED_HOSTS.

Теперь вот странная часть: я начал работать над структурой сайтов и оставлял пользователей и сеансы на потом. Первоначально проблема, с которой я столкнулся до внедрения этого пользовательского промежуточного программного обеспечения, заключалась в том, что django messages показывался только на сайте персонала, а не на сайтах с контентом. Похоже, что сообщения зависели от SESSION_COOKIE_DOMAIN, который был установлен для сайта персонала. После реализации пользовательского промежуточного программного обеспечения сообщения начали появляться и на контентных сайтах. Я думал, что это также решит проблему междоменной аутентификации, но, похоже, это не так. Так почему же сообщения работают, используя этот обходной путь, а не аутентификацию?

...