You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django后台创建的用户无法登录问题求助及代码排查

问题原因与解决方法

你推测的完全正确:Admin后台创建用户时密码未被哈希是核心问题。直接将自定义AbstractUser子类注册到Admin时,系统不会启用专门处理密码哈希的表单逻辑,导致输入的密码以明文存储,而登录验证时authenticate()方法会按照哈希规则校验,自然匹配失败。

解决步骤:自定义UserAdmin类

修改admin.py,替换默认的模型注册方式,使用Django内置的UserAdmin基类管理你的自定义User模型,它会自动处理密码哈希逻辑:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User, Article, Category

class CustomUserAdmin(UserAdmin):
    # Admin列表页显示的字段
    list_display = ('username', 'email', 'date_of_birth', 'is_staff')
    # 编辑页的字段分组
    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        ('个人信息', {'fields': ('email', 'profile_pic', 'date_of_birth')}),
        ('权限设置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
        ('关键日期', {'fields': ('last_login', 'date_joined')}),
    )
    # 添加用户时的表单字段(自动包含密码确认与哈希)
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'email', 'password1', 'password2', 'date_of_birth', 'profile_pic'),
        }),
    )

# 用自定义的UserAdmin注册User模型
admin.site.register(User, CustomUserAdmin)
admin.site.register(Article)
admin.site.register(Category)

额外优化建议

  1. 简化User模型定义:你继承的AbstractUser已经内置了username、email字段,无需重复定义,可简化models.py:
from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    profile_pic = models.ImageField(null=True, blank=True, upload_to="images/profile-images")
    date_of_birth = models.DateField(null=True, blank=True)
    # 移除重复的username和email定义
  1. 完善注册表单密码校验:你的SignUpForm包含password_confirm字段,但当前代码未校验两次密码是否一致,建议添加校验逻辑:
class SignUpForm(forms.Form):
    # ... 原有字段定义 ...

    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get("password")
        password_confirm = cleaned_data.get("password_confirm")

        if password != password_confirm:
            raise forms.ValidationError("两次输入的密码不一致!")
        return cleaned_data

验证效果

修改后重启服务,在Admin后台创建用户时会出现password1和password2输入框,系统会自动对密码进行哈希处理,创建的用户可以正常通过登录接口验证。

内容的提问来源于stack exchange,提问作者TitanRush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 07:14:55