Django: как сохранить основанные на субдомене имена пользователей аутентификации?

Вы попытались использовать -d опция? (создайте подкаталоги)

, Насколько я могу помнить, это подразумевается для cvs co, но не для cvs up.

7
задан rz. 3 November 2009 в 14:31
поделиться

2 ответа

Я думаю, что это может быть хорошим вариантом использования django.contrib.sites в сочетании со вторым пунктом маркера, который вы упомянули. Вы можете создать модель CustomUser следующим образом:

from django.contrib.sites.models import Site

class CustomUser(User):
    """User with app settings."""
    sites = models.ManyToManyField(Site)

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

ИЗМЕНИТЬ : вы можете получить текущий сайт, используя Site. objects.get_current () , а затем проверьте, находится ли текущий сайт на сайтах пользователя.

Вы можете узнать больше о структуре сайтов здесь: http://docs.djangoproject.com/en / dev / ref / contrib / sites /

1
ответ дан 7 December 2019 в 16:43
поделиться
[

]Я создавал эту функциональность для нескольких сайтов в прошлом и обнаружил, что ваша первая пулевая точка - это путь.[

] [

]Это означает, что вам не придется вносить массивные изменения в django auth. Что я сделал, так это настроил пользовательский бэкэнд аутентификации, который абстрагируется от способа хранения имен пользователей.[

] [
auth_backends.py

from django.contrib.auth.backends import ModelBackend

from Home.models import Account

class CustomUserModelBackend(ModelBackend):
    def authenticate(self, subdomain, email, password):
        try:
            user = Account.objects.get(username=u'%s.%s' % (subdomain, email))
            if user.check_password(password):
                return user
        except Account.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return Account.objects.get(pk=user_id)
        except Account.DoesNotExist:
            return None
] [

]Для этого конкретного проекта []Учетная запись [] была пользовательской моделью, и она просто унаследована непосредственно от пользователя, однако вы можете заменить []Учетную запись [] на все, что захотите. [

] [

]Вы должны установить пользовательский бэкэнд auth в файл настроек:[

] [
AUTHENTICATION_BACKENDS = (
    'auth_backends.CustomUserModelBackend',
    'django.contrib.auth.backends.ModelBackend',
)
] [

]Затем, когда вы вызываете []аутентификацию[], вам нужно будет пройти в субдомен, адрес электронной почты и пароль.[

] [

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

].
2
ответ дан 7 December 2019 в 16:43
поделиться
Другие вопросы по тегам:

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