Django - форма входа работает только с хешированным паролем

Возникла проблема с системой авторизации в Django. Имеется следующая view для авторизации пользователя:

def user_login(request):
if request.method == "POST":
    form = Login(request.POST)
    if form.is_valid():
        form_clean = form.cleaned_data
        user_login = form_clean['login']
        user_password = form_clean['password']
        print(user_password)
        user = authenticate(username=user_login, password=user_password)
        if user is not None:
            login(request, user)
            success_text = "Вы успешно вошли в систему."
            return render(request, 'login.html', context={'success':success_text})
        else:
            form = Login()
            err_message = 'Неправильная пара логин/пароль'
            return render(request, 'login.html', context={'login':form, 'err':err_message})
else:
    form = Login()
    return render(request, 'login.html', context={'login':form})

Тем не менее она работает только если ввести хешированный пароль. Как сделать так, чтобы она работала для незахешированного пароля?

P.S. Код регистрации пользователя:

def registrate(request):
if request.method == "POST":
    registr_user = Registr(request.POST)
    if registr_user.is_valid():
        user = registr_user.save(commit=False)
        user.set_password(registr_user.cleaned_data['password'])
        user.save()
        login(request, user)
        return HttpResponseRedirect(reverse('main'))
    else:
        registr_user = Registr()
        return render(request, 'registration.html', context={'form':registr_user})
else:
    registr_user = Registr()
    return render(request, 'registration.html', context={'form':registr_user})

Да, кроме этого использую два сигнала для создания нового кастомного пользователя после создания стандартного User:

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
    MyUser.objects.create(user=instance, id=instance.id)

И второй - для переноса изменений пароля кастомного пользователя на стандартного User:

@receiver(post_save, sender=MyUser)
def change_user_data(sender, instance, **kwargs):
    user = User.objects.get(id = instance.id)
    user.set_password(instance.password)
    user.save()

Т.е. изначально через форму на странице пользователя меняются поля модели MyUser, в т.ч. может измениться и пароль. И при таком изменении пароля я меняю пароль для User. Может быть как раз-таки где-то здесь и есть ошибка. Хотя проблема возникает сразу после регистрации пользователя. Авторизация в функции registrate также не работает, хотя пароль в незахешированном виде записывается в поле user.password.

P.P.S. Добавил принты для проверки введенного в форму авторизации и хранящегося в БД паролей (в функцию user_login)

print('Entered password: '+user_password)
print('Real password: '+second_password)
print(check_password(user_password,second_password))

В итоге получаю следующее:

Entered password: avreliy
Real password:   pbkdf2_sha256$180000$G4ivECeDOkbO$mnP6z4cJZrucJqPa84FqQyAVCZrAk1y9JbbXJ8KnzOc=
False

Т.е. функция проверки текстового и хешированного паролей также не работает. Получается, проблема в authentication backend?


Ответы (0 шт):