django: Можно ли войти в поддомен из другого домена?

Дело в том. У меня есть одно приложение django, обслуживающее разные сайты.

site1.myapp.com
site2.myapp.com

Пользователи входят в систему через стороннюю систему единого входа, которая затем перенаправляется (включая проверку POST) на https://myapp.com/auth/

Тем не мение. поскольку все мои пользователи принадлежат только к 1 «сайту», я хотел бы, чтобы myapp.com/auth/ регистрировал пользователя на соответствующем сайте, например. site1.myapp.com или site2.myapp.com, а затем перенаправить их на этот сайт…

Это вообще возможно?? или я должен сделать это совершенно по-другому? :)

Я должен упомянуть, что когда дело доходит до общего использования приложения, у меня есть промежуточное программное обеспечение поддомена, чтобы гарантировать, что пользователи всегда посещают только поддомен (и данные), для которых действительна их учетная запись.

Причина, по которой я хочу использовать поддомены, заключается в том, чтобы пользователям было проще запомнить URL-адрес своей учетной записи, сохраняя при этом преимущества поддержки только одного приложения django.

благодаря. надеюсь, вы можете помочь :)

с уважением.

Пит


person Peter Møller    schedule 27.01.2011    source источник


Ответы (2)


В Django у вас есть понятие сайтов. Вы можете создать собственное представление журнала. Если этого недостаточно, вы можете создать свой собственный сервер аутентификации.

person e-satis    schedule 27.01.2011
comment
Ну, это не совсем так. Мне нужно, чтобы пользователь мог войти в свое собственное приложение, но это нужно сделать в основном домене. Я не вижу, где часть сайтов помогает мне здесь?? Я больше думаю о сессиях, перенаправлениях, файлах cookie, доменных именах и т. д., но это все, что я понял :-S - person Peter Møller; 27.01.2011
comment
Сайты позволяют разделять коды и записи базы данных в соответствии с сайтом. Но сайт — это то, что вы решите, включая субдомен. Таким образом, вы связываете пользователя с сайтом, вы создаете свою страницу входа, и при входе вы получаете сайт пользователя и перенаправляете его. - person e-satis; 27.01.2011

Я знаю, что этот вопрос устарел, но поскольку Google привел меня сюда, я добавлю эти ссылки

Этот ответ касается (A) аутентификации между поддоменами и (B) определения того, какой поддомен используется для потенциального перенаправления пользователя.

А.1. Если вы хотите разрешить все (подстановочные) поддомены *.myapp.com, это достигается добавлением одной строки в settings.py:

SESSION_COOKIE_DOMAIN=".myapp.com"

Подробно здесь (SO, 2009), здесь (SO, 2010) и в Документы Джанго

Примечание: теперь вход в систему не будет работать на локальном хосте, поэтому у вас есть два варианта входа и выхода на локальном хосте:
1: закомментировать эту строку в settings.py или
2: изменить / etc/hosts, чтобы включить следующее:

127.0.0.1 localhost
127.0.0.1 dev.myapp.com 

Теперь вы можете посетить dev.myapp.com в своем браузере, и на самом деле он будет общаться с 127.0.0.1, а не с вашим работающим веб-сайтом. (Теперь, через dev.myapp.com, site1.myapp.com, site2.myapp.com и myapp.com, если вы войдете/выйдете из одного, вы войдете/выйдете из них всех.)

А.2. Если вы хотите разрешить перекрестную аутентификацию только между этими двумя поддоменами, т. е. они не будут входить в систему site3.myapp.com, тогда будет немного сложнее

Б. Для просмотра используемого поддомена Существуют более сложные пакеты для управления поддоменами в django, но вы можете просто грубо взглянуть на request.META['HTTP_HOST']:

try:
    http_host = request.META['HTTP_HOST']
    # alternative: http_host = request.get_host()
except KeyError:
    http_host = None
    print "Can't find HTTP_HOST"

if http_host and '.myapp.com' in http_host:
    subdomain = http_host.split('.myapp.com')[0]
else:
    subdomain = ''

Затем проверьте, довольны ли вы request.user использованием этого subdomain. Чтобы отправить их на другой поддомен, если хотите. Если вы выполнили A.1 или A.2 выше, в глазах вашего приложения они будут тем же пользователем (уже вошедшим в систему) в новом subdomain.myapp.com после перенаправления (им не нужно входить в систему). снова).

Пример: если пользователь создает учетную запись на ireland.myapp.com, и вы хотите, чтобы он всегда оставался на этом сайте, тогда, когда он попытается посетить usa.myapp.com, он все равно будет входить в систему, вы можете идентифицировать его и отправьте их обратно на ireland.myapp.com (вымышленный пример, а не метафора иммиграции!)

person Mark    schedule 19.09.2015