通过 Django 管理面板创建时,用户密码未经过哈希处理

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

我继承了用户类来进行自定义身份验证。我没有通过这种方式获得密码散列。它只是以纯文本形式存储在 MySQL 数据库中。我已通过管理面板创建了员工,但无法以员工身份登录。此外,我还使用 DRF 和 Djoser 创建了 auth API 端点,但无法使用通过 Django 管理面板创建的用户配置文件登录。

这是我的代码。

模型.py

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

admin.py

from .models import User

class UserAdmin(admin.ModelAdmin):
    pass
admin.site.register(User, UserAdmin)

我在 Stack Overflow 中看到了旧的回复,建议将父类更改为

django.contrib.auth.admin.UserAdmin
。当我尝试此操作时,添加用户模板表单只有 3 个字段。用户名、密码和密码确认。

admin.py

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

class UserAdmin(DefaultUserAdmin):
    pass

admin.site.register(User, UserAdmin)

我该如何解决这个问题。

django django-admin
2个回答
1
投票

我也写了一个自定义的 UserAdmin,所以我想我可以帮助你一点

试试这个:

@admin.register(User)
class UserAdmin(UserAdmin):
    """Define admin model for custom User model with no email field."""

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        (_('Personal info'), {'fields': ('first_name', 'last_name')}),
        (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2'),
        }),
    )
    list_display = ('email', 'is_staff')
    search_fields = ('email',)
    ordering = ('email',)

我还认为你的 models.py 存在问题,因为你没有 userManager

UserManager 在创建用户时使用,所以我猜这有问题


0
投票

@Zesshi 谢谢。你的解决方案对我有用。但我想知道在这种情况下真正导致问题的原因是什么。

© www.soinside.com 2019 - 2024. All rights reserved.