Джанго 1.11 - Сброс пароля

У меня проблема с формой изменения пароля. Я не хочу использовать функцию сброса пароля от Django.

def view_password(request):
    if request.user.is_authenticated():
        if request.method == 'POST':
            form = ChangePasswordForm(request.POST)
            if form.is_valid():
                new_password = form.cleaned_data['new_password']
                confirm_password = form.cleaned_data['confirm_password']
                if new_password == confirm_password:
                    strengh = new_password[0].isalpha()
                    if all(c.isalpha() == strengh for c in new_password):
                        messages.add_message(request, messages.INFO, 'Le mot de passe doit contenir au moins 8 charactères lettres et chiffres.')
                    else:
                        update = User.objects.get(id=request.user.id)
                        update.set_password('new_password')
                        update.save()
                        messages.add_message(request, messages.INFO, 'Votre mot de passe a bien été changé.')
                else:
                    messages.add_message(request, messages.INFO, 'La confirmation du mot de passe est incorrect.')
            else:
                messages.add_message(request, messages.INFO, 'Une erreur est survenue pendant la modification.')
        else:
            form = ChangePasswordForm()
        return render(request, 'password.html', locals())
    else:
        from start.views import view_logon
        messages.add_message(request, messages.INFO, 'Vous devez être connecté pour accéder à cette page.')
        return redirect(view_logon)

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

Спасибо за вашу помощь.

1 ответ

Изменить строку,

update.set_password('new_password')

Чтобы,

update.set_password(new_password)

Вы устанавливали пароль как "новый_пароль" для каждого пользователя. Вот почему вы не можете войти.

set_password принимает аргумент в виде строки и хэши в качестве пароля.

Другие вопросы по тегам