Django CustomUser模型将密码存储为纯文本

dauxcl2d  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(142)

我正在开发基于Django的网站。I'm extends auth.用户模型如下

  1. from django.contrib.auth.models import AbstractUser
  2. class User(AbstractUser):
  3. first_name = None
  4. last_name = None
  5. is_active = models.BooleanField(default=True)
  6. is_granted = models.BooleanField(default=False)
  7. class Meta:
  8. verbose_name = '사용자'
  9. verbose_name_plural = '사용자'

但是当我在django站点管理中创建新的用户数据时,我遇到了麻烦。当我创建新用户时,密码不加密。我不想以纯文本形式存储密码,但哈希不起作用。
我该怎么处理。

mec1mxoz

mec1mxoz1#

您需要以下内容。但请记住,在我的例子中,我使用电子邮件作为唯一字段,而不是用户名。
models.py

  1. class User(AbstractUser):
  2. username = None
  3. email = models.EmailField(unique=True)
  4. first_name = models.CharField(blank=True, null=True, max_length=150)
  5. last_name = models.CharField(blank=True, null=True, max_length=150)
  6. is_staff = models.BooleanField(default=False)
  7. is_active = models.BooleanField(default=False)
  8. is_superuser = models.BooleanField(default=False)
  9. created_on = models.DateTimeField(blank=True, null=True, auto_now_add=True)
  10. USERNAME_FIELD = 'email'
  11. EMAIL_FIELD = 'email'
  12. REQUIRED_FIELDS = []
  13. objects = UserManager()
  14. class Meta:
  15. managed = True
  16. db_table = 'users'
  17. verbose_name = '사용자'
  18. verbose_name_plural = '사용자'
  19. def __str__(self):
  20. return f'{self.email}'

UserManager

  1. from django.contrib.auth.models import BaseUserManager
  2. class UserManager(BaseUserManager):
  3. """Define a model manager for User model with no username field."""
  4. use_in_migrations = True
  5. def _create_user(self, email, password, **extra_fields):
  6. """Create and save a User with the given email and password."""
  7. if not email:
  8. raise ValueError('The given email must be set')
  9. email = self.normalize_email(email)
  10. user = self.model(email=email, **extra_fields)
  11. user.set_password(password) #---> This is the function which hashes the password.
  12. user.save(using=self._db)
  13. return user
  14. def create_user(self, email, password=None, **extra_fields):
  15. """Create and save a regular User with the given email and password."""
  16. extra_fields.setdefault('is_staff', False)
  17. extra_fields.setdefault('is_superuser', False)
  18. return self._create_user(email, password, **extra_fields)
  19. def create_superuser(self, email, password, **extra_fields):
  20. """Create and save a SuperUser with the given email and password."""
  21. extra_fields.setdefault('is_staff', True)
  22. extra_fields.setdefault('is_superuser', True)
  23. extra_fields.setdefault('is_active', True)
  24. if extra_fields.get('is_staff') is not True:
  25. raise ValueError('Superuser must have is_staff=True.')
  26. if extra_fields.get('is_superuser') is not True:
  27. raise ValueError('Superuser must have is_superuser=True.')
  28. return self._create_user(email, password, **extra_fields)
展开查看全部

相关问题