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?