Как разрешить вход в систему только пользователям с определенным доменом? 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 или модели в соответствии с вашими пожеланиями. Какой из них выбрать? Это уже другая тема.
- Валидация поля модели Django в сравнении с полем сериализатора DRF валидация
- Как проводить валидацию по полным данным модели в 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']