Здравствуйте. Возникла проблема с системой авторизации пользователя в Django. Всё работало, но теперь почему-то функции authenticate и login не хешируют принимаемый из формы пароль.
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})
View для регистрации:
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, повешены два сигнала:
Первый - при создании нового объекта User, создаю новый объект MyUser:
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
MyUser.objects.create(user=instance, id=instance.id)
Второй - при смене пароля MyUser, меняю пароль для 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()
В итоге авторизация по текстовому паролю работает для админа, и работает для пользователей после смены их паролей через джанговскую админку. Также, до смены пароля пользователей в админке, могу зайти в их аккаунты по хешированному паролю.
Подскажите, в чем может быть дело. Уже третий день не могу решить эту проблему.