Чтобы узнать, с какого домена поступает запрос, вы должны использовать request.META["HTTP_HOST"]
.
Однако, не полагайтесь на это значение для аутентификации, его можно легко подделать. Аутентификация должна выполняться обычным способом с django.contrib.session
. Запрос от определенного домена / субдомена не должен иметь больше привилегий / прав, даже если запрос содержит аутентифицированный сеанс. Привилегии должны предоставляться пользователям / группам пользователей, а не доменам.
Обратите внимание, что сеансы браузера не могут пересекать домены второго уровня (например, файл cookie сеанса с foo.com не будет отправлен на bar.com), однако он может быть файлом cookie * .foo.com для всех поддоменов (если вы явно указали установить так).
Пусть ваши пользователи направят свои записи DNS на IP-адрес вашего сервера, пусть NGINX направит запрос на основе домена к вашему бэкэнду и проведет обычную аутентификацию в Django.
Ваш вопрос:
откуда мое приложение знает, что оно
пришел из аккаунта spamfoo
Я не знаю специфики вашего приложения, но не должно иметь значения, откуда поступил запрос, но кто его выдал (например, аутентифицированный пользователь). У вас должна быть модель / поле, которое связывает ваших пользователей с соответствующими доменами. Когда пользователь связан только с одним доменом, приложение должно предполагать, что пользователь пришел из этого домена. Когда пользователь подключен к нескольким доменам, вы можете посмотреть request.META["HTTP_HOST"]
. Если это значение соответствует какому-либо из доменов, с которыми связан пользователь, это нормально, значение может быть подделано, но тем не менее пользователем, связанным с этим доменом.