Пароль - , а не , хранящийся в виде необработанного текста в базе данных, что было бы очень небезопасно.Если, например, ваша база данных каким-то образом взломана, то хакер имеет доступ ко всем паролям.
Общий механизм защиты: хеширование [wiki] , где одностороннее направлениеФункция хеширования используется для создания «дайджеста» и сохранения его в базе данных.Один аутентифицируется для запуска того же хеширования на пароле, и посмотреть, совпадают ли дайджесты.В результате, не зная пароля, сервер может узнать, равны ли эти два пароля (или очень вероятно, что они равны).
Если вы создаете необработанный объект User
, вы не передаетепароль через функцию хеширования.Аутентификация с использованием дайджеста в базе данных - это не то же самое, что аутентификация с использованием оригинального пароля, так что на самом деле происходит сбой.Тот факт, что объект User
существует с этим конкретным необработанным дайджестом, не означает, что это пароль, и, следовательно, вы не можете ожидать, что, поскольку .exists()
успешен, аутентификация также успешна.
Чтобы установить пароль, вы должны использовать set_password
[Django-doc] или изменить пароль с помощью changepassword
команда [Django-doc] .Если вы создаете пользователя, вы должны использовать create_user
[Django-doc] для хеширования введенного пароля соответствующим образом.