При тестировании API я получаю ошибку "invalid user or password".
Я пытаюсь создать API для входа в систему, но при тестировании получаю ошибку "invalid user or password". Я проверил базу данных, пользователь и пароль верны, существуют и верны.
Я прикрепил код просмотра журнала и ошибку в формате PNG ниже:
А вот и ошибка:
Как решить эту проблему?
Я проверил базу данных и пользователь существует, я также напечатал пользователя и пароль в терминале, и пользователь и пароль правильные, но я все еще продолжаю получать ошибку.
Для потомков, когда человек использует пользовательскую модель Auth User, ему приходится многое делать самостоятельно. Среди них регистрация модели в админке, хеширование паролей для безопасного хранения паролей, определение формы модели и т.д.
In the case of password hashing, if you do not hash password, it will be stored in plain text. Hence it is important to hash password before storage for security reasons. There are many hashing algorithms Django offers which you can choose from and they each have their pros and cons. See "Password management in Django". [django-docs]
Лучше всего хэшировать пароль при сохранении экземпляра User
. Переопределите метод save
модели и выполните хэширование поля password экземпляра.
from django.contrib.auth.hashers import make_password
class User(AbstractBaseUser):
•••Rest of code•••
def save(self, *args, **kwargs):
self.password = make_password(self.password)
super().save(*args, **kwargs)
make_password()
[django-docs] использует первый элемент настройки PASSWORD_HASHERS
для превращения простого текста пароля в шифр.
Теперь ваш вызов check_password()
[django-docs] будет вести себя так, как ожидалось. Он будет корректно сравнивать обычный текст пароля с хэшированным паролем в базе данных.