Поскольку я точно не знаю, как вы создаете нового пользователя, я предполагаю, что вы делаете что-то вроде
user = CustomUser.objects.create(username="boohoo", email="boo@hoo.com", password="boohoopass")
Этот объект пользователя будет хранить пароль в виде простого текста. Django автоматически не преобразует текст в хэшированное значение, вместо этого, если вы копаете глубже, вы найдете метод с именем make_password
или в AbstractUser
, set_password
есть метод, который в основном преобразует строку в ha sh ценность. Поэтому, когда вы создаете пользователя, используйте любой из этих методов.
user = CustomUser.objects.create(username="boohoo", email="boo@hoo.com")
user.passowrd = make_password("boohoopass")
# or
user.set_password("boohoopass")
Еще лучший подход - использовать метод в UserManager
, create_user
, который автоматически сделает это за вас.
user = CustomUser.objects.create_user(username="boohoo", email="boo@hoo.com", password="boohoopass")
ОБНОВЛЕНО В вашем случае ваш класс администратора также должен наследовать от UserAdmin
от django. Потому что администратор пользователя также вызывает специфицированные c функции для создания таких вещей, как пароль ha sh keys.
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as OrigUserAdmin
@admin.register(CustomUser)
class CustomUserAdmin(OrigUserAdmin):
list_display = (
'id', 'first_name', 'last_name', 'username', 'email', 'is_active'
)