Прежде всего, пожалуйста, начните писать на Python, а не на любом другом языке, который вы пытаетесь написать здесь. Строки Python не заканчиваются точками с запятой, и способ проверить, является ли переменная пустой, должен сделать if not <var>
.
Во-вторых, прекратите использовать MD5. Как я уже упоминал, он ужасно небезопасен, а его уязвимости известны годами. Не должно быть никаких причин использовать его в своем собственном коде. И вы делаете это намного хуже с помощью статической соли; весь смысл соли в том, что она каждый раз отличается, чтобы не использовать радужные столы.
В-третьих, вы никогда не должны вызывать методы clean_
напрямую. Получите данные из form.cleaned_data
dict - например, mdp = inscription_form.cleaned_data['mdp']
.
И, наконец, просто прекрати все это делать. Все, что вам удалось сделать, это обойти то, что Django делает для вас, делая ваш код гораздо менее безопасным, обслуживаемым и пригодным для использования. Например, нет причины вызывать make_password
в вашем методе clean_mdp
; еще меньше причин, чтобы потом снова назвать его в представлении против необработанных данных POST. И то, и другое бессмысленно, потому что это уже то, что authenticate
делает ; в этом весь смысл фреймворка auth. Причина, по которой ваш логин не работает, состоит в том, что проверяемый пароль хэшируется дважды.
И точно так же, когда вы создаете пользователя, не хэшируйте пароль явно; передайте версию без ссылки на user.set_password
или просто позвоните User.objects.create_user
в первую очередь.
Итак. Удалите ваши формы clean_mdp
методами. Удалите настройку PASSWORD_HASHERS
. Удалите эту SEL
константу. Вид входа в систему должен быть:
if connexion_form.is_valid():
identifiant = connexion_form.cleaned_data['identifiant']
mdp = connexion_form.cleaned_data['mdp']
user = authenticate(username=identifiant, password=mdp)
if user is not None:
login(request, user)
и ваш вид регистрации должен быть:
if connexion_form.is_valid():
mdp = connexion_form.cleaned_data['mdp']
...
utilisateur = User.objects.create_user(username=nom_utilisateur, first_name=prenom,last_name=nom, \
email=mail, password=mdp)
и все должно работать.