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, чтобы я мог использовать поле электронной почты вместо поля имени пользователя, потому что у меня закончились идеи и браузеры?