Как разрешить вход в систему только пользователям с определенным доменом? Django аутентификация google

Я пытаюсь ограничить доступ к странице только для зарегистрированных пользователей. Я использовал аутентификацию google, но она позволяет каждой учетной записи войти в систему; вместо этого я хочу избежать всех доменов, отличных от 'fermi.mo.it'. Учетная запись google типа luca@gmail.com не должна иметь возможности войти, в то время как учетная запись типа luca@fermi.mo.it должна иметь такую возможность.

Я заметил этот код, чтобы сделать его, но он не работает. Он говорит: "Нет модуля с именем 'social_core'", но я установил его.

AUTHENTICATION_BACKENDS = (
    'social_core.backends.google.GoogleOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['fermi.mo.it']

Вот все модули, которые я установил:

Если django не может найти модуль, убедитесь, что вы добавили 'social_django' ro установленные приложения.

Другой вариант заключается в том, что вы можете создать валидатор на уровне Serializer или модели в соответствии с вашими пожеланиями. Какой из них выбрать? Это уже другая тема.

  1. Валидация поля модели Django в сравнении с полем сериализатора DRF валидация
  2. Как проводить валидацию по полным данным модели в DjangoREST Framework

Вам нужно только проверить, содержит ли письмо строку 'fermi.mo.it'. Если нет, то вызовите исключение.

Документация каждого из них: Django Validators и Validators DRF.

Я вижу, что ОП уже установил приложение

pip install social-auth-app-django

Итак, теперь ОП должен

1 Убедитесь, что вы добавили приложение в INSTALLED_APPS настройки

INSTALLED_APPS = (
    ...
    'social_django',
    ...
)

2 После этого синхронизируйте базу данных для создания необходимых моделей

./manage.py migrate

3 Затем, человек хочет ограничить количество писем, которые Google показывает в списке

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
        'hd': 'fermi.mo.it'
    }

4 Наконец, можно ограничить количество писем, которые могут войти в систему

SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['fermi.mo.it']
Вернуться на верх