【问题标题】:Password field is visible and not encrypted in Django admin site密码字段在 Django 管理站点中可见且未加密
【发布时间】:2022-09-28 21:25:36
【问题描述】:

所以要使用电子邮件作为用户名,我会像这样覆盖内置的User 模型(灵感来自Django source code

模型.py

class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True)
    objects = UserManager()
    USERNAME_FIELD = \"email\"
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

管理员.py

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {\"fields\": (\"email\", \"password\")}),
        ((\"Personal info\"), {\"fields\": (\"first_name\", \"last_name\")}),
        (
            (\"Permissions\"),
            {
                \"fields\": (
                    \"is_active\",
                    \"is_staff\",
                    \"is_superuser\",
                    \"groups\",
                    \"user_permissions\",
                ),
            },
        ),
        ((\"Important dates\"), {\"fields\": (\"last_login\", \"date_joined\")}),
    )
    add_fieldsets = (
        (
            None,
            {
                \"classes\": (\"wide\",),
                \"fields\": (\"email\", \"password1\", \"password2\"),
            },
        ),
    )
    list_display = (\"email\", \"is_active\", \"is_staff\", \"is_superuser\")
    list_filter = (\"is_active\", \"is_staff\", \"is_superuser\")
    search_fields = (\"email\",)
    ordering = (\"email\",)
    filter_horizontal = (\"groups\", \"user_permissions\",)

但这就是我去管理站点更改用户时的样子:

密码是可见的未散列并且没有链接到更改密码形式。

与默认 Django 项目的外观相比:

密码是不可见的并且有一个链接到更改密码表格

很明显我错过了一些东西,但我无法弄清楚它是什么。

  • 您可以添加views.py 或serializers.py 吗?
  • 我还没有那么远。我需要先解决这个问题。我可以通过调用make_password 函数在视图中处理这个问题,但这也应该在管理站点中解决。

标签: python django django-models django-admin


【解决方案1】:

Django Admin 外观问题很可能与继承有关。更准确地说,将类更改为从UserAdmin 继承。

from django.contrib.auth.admin import UserAdmin as DefaultUserAdmin

class UserAdmin(DefaultUserAdmin):

这样做会使它看起来更接近默认的 Django 项目。


密码未加密的问题很可能是因为它没有在数据库中加密。 OP has this question 这不是 Django 管理员的问题。


笔记:

  • 当我想删除username 时,我也使用AbstractUser

  • 由于当前这个问题没有足够的信息来回答密码被散列的问题,我将把它留给OP's other question

  • 关于散列密码,OP 有另外一个问题。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2019-05-06
    • 2020-11-12
    • 2017-11-11
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2020-05-04
    相关资源
    最近更新 更多