Не хешируется пароль в Django

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023

Я создаю свою модель user и когда делаю это через сайт на поле регистрации пароль не хешируется, при этом когда создаю через админку все нормально.

class User(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=50, unique=True)
    email = models.EmailField(null=True, blank=True)
    phone = PhoneNumberField(unique=True, null=True)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_verifed = models.BooleanField(default=False)
    objects = Usermanager()
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'phone']```

class Usermanager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self, username=None, email=None, password=None, phone=None, **extra_fields):
        user = self.model(**extra_fields,
                            email = email,
                            username=username,
        )
        user.set_password(password)
        user.save()
        return user

    def create_user(self, username, email, phone, password=None, **extra_fields):
        extra_fields.setdefault('is_superuser', False)
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_active', True)

        return self._create_user(email=email, username=username, phone=phone, password=password, **extra_fields)

    def create_superuser(self, username, email, phone, password=None, **extra_fields):
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_active', True)

        return self._create_user(email=email, phone=phone, username=username, password=password, **extra_fields)```

views.py:

class RegisterUser(CreateView):
    form_class = UserForm
    template_name = 'users/register.html'

    def get_success_url(self):
        return reverse_lazy('home')```

User = get_user_model()
class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ['username', 'phone', 'email', 'password', 'is_superuser', 'is_active', 'is_staff']```

Из-за того что пароль не хешируется, не могу выполнять аутентификацию.

Ответы

▲ 0

Попробуй переопределить метод form_valid во view и сохранить пароль с помощью метода set_password

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.set_password(self.object.password)
    self.object.save()
    return super().form_valid(form)

если не получится можно попробовать прикрутить функцию make_password