我在 Django 应用程序中使用
AbstractBaseUser
和 UserCreationForm
。通过我的应用程序注册用户时,密码以哈希格式保存并保存在数据库中。但是当我尝试使用 Django 管理站点执行相同的操作时,密码会以原始格式保存。
您需要确保您的模型管理类知道如何对密码进行哈希处理。根据 文档,如果您使用子类化
AbstractBaseUser
,那么您也许可以扩展 UserAdmin
。
假设您的自定义用户模型名为
CustomUser
,您可以尝试以下操作。
from django.contrib.auth.admin import UserAdmin
class CustomUserAdmin(UserAdmin):
...
admin.site.register(CustomUser, CustomUserAdmin)
我猜问题是你从 admin.py 中的 django.contrib.auth.admin 继承了 ModelAdmin 而不是 UserAdmin 。
示例代码:
from django.contrib.auth.admin import UserAdmin
from .models import Employee
class EmployeeAdmin(UserAdmin):
pass
admin.site.register(Employee, EmployeeAdmin)
在自定义用户模型中,您可以引入一种方法来检查密码是否已经经过哈希处理。如果没有散列,该方法应该对密码进行散列,即
def save(self, *args, **kwargs):
if self.password and not self.password.startswith(('pbkdf2_sha256$', 'bcrypt$', 'argon2')):
self.password = make_password(self.password) super().save(*args, **kwargs)