Django 管理员未对用户密码进行哈希处理

问题描述 投票:0回答:3

我在 Django 应用程序中使用

AbstractBaseUser
UserCreationForm
。通过我的应用程序注册用户时,密码以哈希格式保存并保存在数据库中。但是当我尝试使用 Django 管理站点执行相同的操作时,密码会以原始格式保存。

django web django-admin
3个回答
21
投票

您需要确保您的模型管理类知道如何对密码进行哈希处理。根据 文档,如果您使用子类化

AbstractBaseUser
,那么您也许可以扩展
UserAdmin

假设您的自定义用户模型名为

CustomUser
,您可以尝试以下操作。

from django.contrib.auth.admin import UserAdmin

class CustomUserAdmin(UserAdmin):
    ...

admin.site.register(CustomUser, CustomUserAdmin)

4
投票

我猜问题是你从 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)

0
投票

在自定义用户模型中,您可以引入一种方法来检查密码是否已经经过哈希处理。如果没有散列,该方法应该对密码进行散列,即

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)
© www.soinside.com 2019 - 2024. All rights reserved.