Задать вопрос
@MAGistr_MTM
Учусь программировать

Как сделать отделный домен для каждого юзера?

Мне нужно сделать так, что б для каждого юзера организации был свой поддомен. Потом организация приглашает к себе юзеров и с ними работает.
Как это реализировать?
Со всех доменов направлять в апликацию, мидлварой доставать назву организации, и потом ее додавать до реквеста?
Какие еще варианты?
И еще вопрос. Очень нужно, что б когда админ создал организацию, для нее автоматически создавался поддомен. Как это сделать?
Буду очень признателен за помощь.
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
https://nginx.org/ru/docs/http/server_names.html

Специальное имя с маской вида “.example.org” соответствует как точному имени “example.org”, так и маске “*.example.org”.

Дальше разруливаете на уровне приложения.
Ответ написан
Комментировать
@antonksa
Я бы сделал так:
1. Как сказали выше example.org ставится nginx'у как условие направления запросов в приложение. Т.е. любой pupkin.example.org и ivanov.example.org уйдут в Джанго на обработку.
2. Создал модель Company в базе данных с индексируемым полем domain.
3. Сделал мидлварь, которая наподобие мидлвари ванильной авторизации выковыривает хост из request.META, лезет в базу, находит объект компании и прикрепляет его к запросу
setattr(request, 'company', company_instance)
, после этого объект компании можно будет юзать во вьюхах, так же как и юзера:
request.company
4. В случае если в имени хоста нету домена третьего уровня, то я бы сделал
setattr(request, 'main_site', True)
чтобы во вьюхе можно было понять что это основной сайт, а если поддомен передан, но в базе его нет, то я бы сразу вернул редирект на страницу с инфой, что такой компании не существует, или она заблокирована, или еще что, зарегистрируйтесь и будет вам счастье.
5. Автоматическое создание поддомена это лишь создание
Company.objects.create(
    owner=some_user,
    domain=company_domain,
    email=company_email,
    ...
    created=timezone.now()
)

, вопрос только в том, будет ли company_domain генерироваться согласно какому-то принципу, или задаваться админом, или юзером при регистрации, или с потолка или рандом, вариантов как звезд на небе, а вопрос слишком обширный, типа "я хочу сделать сайт как фейспук, шо мне делать".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы