Невозможно хешировать пароль в бэкэнде Django - PullRequest
0 голосов
/ 25 января 2019

Я создал пользовательскую модель пользователя, потому что мне нужно было войти в систему, используя электронную почту вместо имени пользователя.Если пользователь регистрируется во внешнем интерфейсе, пароль хэшируется очень хорошо, но когда я пытаюсь создать пароль из бэкэнда Django, пароль сохраняется в виде простого текста.

admin.py

def save(self, commit=True):
    # Save the provided password in hashed format
    user = super(RegisterForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password"])
    if commit:
        user.save()
    return user

forms.py

class RegisterForm(forms.ModelForm):
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)
    password2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('email',)

    def clean_email(self):
        email = self.cleaned_data.get('email')
        qs = User.objects.filter(email=email)
        if qs.exists():
            raise forms.ValidationError("email is taken")
        return email

    def clean_password2(self):
        # Check that the two password entries match
        password = self.cleaned_data.get("password")
        password2 = self.cleaned_data.get("password2")
        if password and password2 and password != password2:
            raise forms.ValidationError("Passwords don't match")
        return password2

    def save(self, commit=True):
        user = super(RegisterForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password'])
        # user.is_applicant = True
        user.is_active = True  
        if commit:
            user.save()
        return user

Пожалуйста, обратитесь за помощью.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Отредактируйте def save для этого в форме создания пользователя в admin.py,

def save(self, commit=True):
    user = super().save(commit=False)
    user.set_password(self.cleaned_data['password'])

    if commit:
        user.save()
    return user
0 голосов
/ 25 января 2019

Возможно, вам следует создать пользователя, используя официальную функцию, см. Create_user. https://docs.djangoproject.com/en/2.2/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...