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

Django用户模型缺失双重认证及密码未哈希存储问题

解决Django用户注册的双重密码校验与密码哈希问题

1. 密码明文存储的修复

Django的AbstractUser默认自带密码哈希逻辑,出现明文存储大概率是直接赋值password字段而非使用set_password()方法,或者表单未正确处理密码流程。

正确的用户创建方式

无论通过代码手动创建还是表单提交,必须用set_password()处理明文密码:

# 错误:直接赋值导致明文存储
user = AppBaseUser(username='customer001', password='123456')
user.save()

# 正确:自动生成哈希值
user = AppBaseUser(username='customer001')
user.set_password('123456')
user.save()

表单层面的哈希处理

如果用自定义注册表单,优先继承UserCreationForm(自带密码哈希逻辑),或在表单的save()方法中手动调用set_password():

from django.contrib.auth.forms import UserCreationForm
from .models import AppBaseUser

class BaseRegistrationForm(UserCreationForm):
    class Meta:
        model = AppBaseUser
        fields = ['username', 'email']

2. 双重密码校验的实现

Django默认的UserCreationForm已经包含password1和password2字段及校验逻辑,如果是完全自定义的表单,需手动添加字段并做一致性校验:

自定义带双重校验的注册表单

from django import forms
from .models import AppBaseUser

class CustomerRegistrationForm(forms.ModelForm):
    password1 = forms.CharField(label='密码', widget=forms.PasswordInput)
    password2 = forms.CharField(label='确认密码', widget=forms.PasswordInput)

    class Meta:
        model = AppBaseUser
        fields = ['username', 'email']

    def clean_password2(self):
        # 校验两次密码是否一致
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError('两次输入的密码不匹配')
        return password2

    def save(self, commit=True):
        # 保存时自动哈希密码
        user = super().save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        if commit:
            user.save()
            # 创建对应的客户角色实例
            AppCustomerUser.objects.create(user=user)
        return user

3. 关键配置检查

确保settings.py中已正确绑定自定义用户模型:

AUTH_USER_MODEL = 'your_app_name.AppBaseUser'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:31