Django socialaccount login with email instead of username

Я пытаюсь реализовать google login в моем Django приложении. В моем стандартном представлении входа в систему на основе классов я использую расширенную модель AbstractBaseUser, и она отлично работает:

class AppUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    is_staff = models.BooleanField(default=False)
    USERNAME_FIELD = 'email'

    objects = CustomUserManager()

    def get_by_natural_key(self, email):
        return self.get(email=email)

    def set_password(self, raw_password):
        self.password = make_password(raw_password)

В файле settings.py я добавил следующее:

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    ...
]

SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': [
            'profile',
            'email'
        ],
        'AUTH_PARAMS': {
            'access_type': 'online',
        }
    }
}

...

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_PASSWORD_MIN_LENGTH = 8


SITE_ID = 1
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

AUTH_USER_MODEL = "profiles.AppUser"

Вот сообщение об ошибке, которое я получил:

FieldDoesNotExist at /accounts/google/login/callback/
AppUser has no field named 'username'

...Python\Python39\lib\site-packages\django\db\models\options.py, line 681, in get_field
            return self.fields_map[field_name] …
Local vars
During handling of the above exception ('username'), another exception occurred:
...Python\Python39\lib\site-packages\django\core\handlers\exception.py, line 55, in inner
                response = get_response(request) …
Local vars
...Python\Python39\lib\site-packages\django\core\handlers\base.py, line 197, in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) …
Local vars
...Python\Python39\lib\site-packages\allauth\socialaccount\providers\oauth2\views.py, line 87, in view
                return self.dispatch(request, *args, **kwargs) …
Local vars
...Python\Python39\lib\site-packages\allauth\socialaccount\providers\oauth2\views.py, line 171, in dispatch
            return complete_social_login(request, login) …
Local vars
...Python\Python39\lib\site-packages\allauth\socialaccount\helpers.py, line 220, in complete_social_login
            return _complete_social_login(request, sociallogin) …
Local vars
...Python\Python39\lib\site-packages\allauth\socialaccount\helpers.py, line 239, in _complete_social_login
        ret = _process_signup(request, sociallogin) …
Local vars
...Python\Python39\lib\site-packages\allauth\socialaccount\helpers.py, line 79, in _process_signup
                get_account_adapter(request).clean_username(username) …
Local vars
...Python\Python39\lib\site-packages\allauth\account\adapter.py, line 312, in clean_username
        for validator in app_settings.USERNAME_VALIDATORS: …
Local vars
...Python\Python39\lib\site-packages\allauth\account\app_settings.py, line 416, in __getattr__
    return getattr(_app_settings, name) …
Local vars
...Python\Python39\lib\site-packages\allauth\account\app_settings.py, line 374, in USERNAME_VALIDATORS
                    get_user_model() …
Local vars
...Python\Python39\lib\site-packages\django\db\models\options.py, line 683, in get_field
            raise FieldDoesNotExist( …

Есть ли способ переопределить настройки socialaccount, чтобы я мог использовать поле электронной почты вместо поля имени пользователя, потому что у меня закончились идеи и браузеры?

Вернуться на верх