Сбой входа в систему Django Rest Framework
Я пытаюсь заставить DRF работать без пользовательских сериализаторов, представлений и урлов, просто используя стандартные, но есть проблема с моим логином. Всякий раз, когда я создаю пользователя на /api/v1/auth/register
(это происходит успешно), а затем пытаюсь войти на /api/v1/auth/login
, я получаю следующее сообщение об ошибке:
{
"non_field_errors": [
"Unable to log in with provided credentials."
]
}
Требуемые учетные данные для входа в систему следующие, хотя я установил ACCOUNT_USERNAME_REQUIRED = False:
{
"username": "",
"email": "",
"password": ""
}
В панели администратора я успешно вхожу в систему с теми же учетными данными, что доказывает их правильность. Даже когда я настраиваю использование только электронной почты в качестве учетных данных, мне все равно требуется пароль. Вот мой файл settings.py:
...
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
...
'django.contrib.sites',
'rest_framework',
'rest_framework.authtoken',
'dj_rest_auth',
'rest_framework_simplejwt',
'allauth',
'allauth.account',
'allauth.socialaccount',
'dj_rest_auth.registration',
]
MIDDLEWARE = [
...
"allauth.account.middleware.AccountMiddleware",
]
...
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'dj_rest_auth.jwt_auth.JWTCookieAuthentication',
)
}
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(hours=1),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1),
}
REST_AUTH = {
"USE_JWT": True,
"JWT_AUTH_COOKIE": "_auth",
"JWT_AUTH_REFRESH_COOKIE": "_refresh",
"JWT_AUTH_HTTPONLY": False,
}
SITE_ID = 1
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
LOGIN_URL = "/api/v1/auth/login"
Я перепробовал множество других подходов, таких как пользовательская модель, представления и сериализаторы, но это так и не помогло, даже стало хуже. Я предполагаю, что есть что-то связанное с dj_rest_auth.serializers.LoginSerializer
, потому что он выбрасывает ошибку, но я не знаю, как это исправить. Как вы можете видеть, это большой сериализатор, и многое здесь может пойти не так:
PS Я очень тупой (вы уже видите), поэтому, пожалуйста, объясните мне как можно проще. Спасибо!