Я использую django-rest-auth
с надстройкой регистрации, которая использует django-allauth
для реализации конечных точек регистрации, подтверждения, входа через социальные сети и т. д. Это в основном работает, однако я не могу понять, где разместить определенные настройки, чтобы регистрация и другие конечные точки аутентификации соответствовали различным настройкам allauth
. Мои текущие проблемы:
- Пользователи могут входить в систему, не подтверждая свою электронную почту — параметр
allauth
ACCOUNT_EMAIL_VERIFICATION (по умолчанию = 'необязательно') определяет, является ли это обязательным. - Пользователи должны указать имя пользователя при регистрации, несмотря на то, что оно не требуется моей моделью пользователя (адрес электронной почты - это мое поле имени пользователя) - параметр
allauth
ACCOUNT_USERNAME_REQUIRED (по умолчанию = True) управляет этим
Я попытался добавить вышеуказанные настройки для решения этих проблем, но конечные точки регистрации и входа, похоже, их не учитывают. Например, из моего settings.py
:
....
ALLAUTH = {
'ACCOUNT_EMAIL_VERIFICATION': 'mandatory',
'ACCOUNT_USERNAME_REQUIRED': False,
}
....
Однако при просмотре сериализаторов allauth
и django-rest-auth
настройки allauth
проверяются следующим образом (из django-rest-auth
LoginSerializer
):
# If required, is the email verified?
if 'rest_auth.registration' in settings.INSTALLED_APPS:
from allauth.account import app_settings
if app_settings.EMAIL_VERIFICATION == app_settings.EmailVerificationMethod.MANDATORY:
email_address = user.emailaddress_set.get(email=user.email)
if not email_address.verified:
raise serializers.ValidationError(_('E-mail is not verified.'))
Глядя на django-rest-auth/registration
RegisterSerializer
похоже:
try:
from allauth.account import app_settings as allauth_settings
from allauth.utils import (email_address_exists,
get_username_max_length)
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
except ImportError:
raise ImportError('allauth needs to be added to INSTALLED_APPS.')
....
class RegisterSerializer(serializers.Serializer):
username = serializers.CharField(
max_length=get_username_max_length(),
min_length=allauth_settings.USERNAME_MIN_LENGTH,
required=allauth_settings.USERNAME_REQUIRED
)
email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
password1 = serializers.CharField(required=True, write_only=True)
password2 = serializers.CharField(required=True, write_only=True)
В обоих местах настройки allauth
импортируются непосредственно из allautha.account.app_settings
, а не settings.py
, как я и ожидал. В исходнике allauth
на github я вижу файл app_settings
, однако значит ли это, что мне нужно поместить туда нужные мне настройки? Разве смысл settings.py
не в том, чтобы быть единым местом для сопоставления настроек установленных приложений?