从AbstractUser继承的模型不会哈希密码字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从AbstractUser继承的模型不会哈希密码字段相关的知识,希望对你有一定的参考价值。

我有一个继承了AbstractUser的模型,如下所示:

class Driver(AbstractUser):
  dni = models.CharField(max_length=8,validators=[validate_dni],unique=True)
  license = models.CharField(max_length=9,unique=True)
  birthday = models.DateField()
  sex = models.CharField(max_length=1, choices=SEX_CHOICES)
  creation_date = models.DateField(auto_now = True)

根据这个:https://docs.djangoproject.com/en/dev/topics/auth/customizing/

如果您对Django的用户模型完全满意并且您只想添加一些其他配置文件信息,则可以简单地继承django.contrib.auth.models.AbstractUser并添加自定义配置文件字段。此类提供默认用户的完整实现作为抽象模型。

但是,在我的管理视图中,密码字段是一个简单的文本输入,密码保存为原始文本。我可以尝试使用AbstractBaseUser,但首先我需要澄清这个问题。我是从Django开始的,所以我是一个小新手。

谢谢。

答案

您需要定义一个函数来散列该密码。我想你直接把它保存到数据库。

class MyForm(forms.ModelForm):
    ............
    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(MyForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user
另一答案

您不必实际定义自己的功能。你只需要使用来自UserAdmindjango.contrib.auth.admin类注册它,它开箱即用。

显然,在您的admin.py文件中,请确保您具有以下内容:

from django.contrib.auth.admin import UserAdmin
admin.site.register(CustomUserModel, UserAdmin)

以上是关于从AbstractUser继承的模型不会哈希密码字段的主要内容,如果未能解决你的问题,请参考以下文章

Django用户继承AbstractUser后密码为明文

Django用户继承AbstractUser后密码为明文

django - 继承 AbstractUser 明文 问题处理

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

无法更新自定义用户 (AbstractUser)

Django-models,继承AbstractUser类