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

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

Мне нужно сделать так, что б для каждого юзера организации был свой поддомен. Потом организация приглашает к себе юзеров и с ними работает.
Как это реализировать?
Со всех доменов направлять в апликацию, мидлварой доставать назву организации, и потом ее додавать до реквеста?
Какие еще варианты?
И еще вопрос. Очень нужно, что б когда админ создал организацию, для нее автоматически создавался поддомен. Как это сделать?
Буду очень признателен за помощь.
  • Вопрос задан
  • 85 просмотров
Подписаться 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 генерироваться согласно какому-то принципу, или задаваться админом, или юзером при регистрации, или с потолка или рандом, вариантов как звезд на небе, а вопрос слишком обширный, типа "я хочу сделать сайт как фейспук, шо мне делать".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽