Итак, я просто пытался создать базовую учетную запись для входа и регистрации с пользовательскими проверками.Но по какой-то причине я постоянно получаю недопустимую ошибку соли, когда приходит время попытаться войти в систему. Могу добавить, что способ настройки моего bcrypt работал в предыдущих проектах. Но когда я обновляюсь до Python3, по какой-то причинеон получает эту ошибку для меня .. Я начал размещать операторы печати во всем приложении и сузил его до своего средства проверки формы входа.Вот результаты: -----
test display of logpassword: rrrrrr
user password: b'$2b$12$B3O9.UiaswKJvXkKAG2o9uqMHi5XrRBSyvDIPYwEa/o4AgyoGDww.'
what the encoded password we are seeing? b"b'$2b$12$B3O9.UiaswKJvXkKAG2o9uqMHi5XrRBSyvDIPYwEa/o4AgyoGDww.'"
what is the encoded password from logpassword? b'rrrrrr'
TEst 2 post data encode: b'rrrrrr'
сравните это с приведенным ниже кодом, и вы увидите, что пароль правильно хэшируется при регистрации.Однако введенные данные после кодирования не хэшируют / не кодируют их должным образом для сравнения с хешированным паролем в БД.Любая помощь очень ценится, так как я застрял на этом в течение некоторого времени ..
Код: - Views.py Я только отправлю соответствующие функции ---
from django.shortcuts import render, redirect
from django.contrib import messages
from django.urls import reverse
from time import gmtime, strftime
import bcrypt
import re
from .models import *
from django.contrib import messages
def login(request):
if request.method == "POST":
#Check errors
errors = User.objects.LogForm_Validator(request.POST)
if len(errors):
# if the errors object contains anything, loop through each key-value pair and make a flash message
for key, value in errors.items():
messages.error(request, value)
return redirect('/')
else:
email = request.POST['logemail']
user = User.objects.get(email=email)
password = user.password
print("user: ", user)
print("Printed password: LOGFORM ", password)
print("email: ", email)
request.session['id'] = user.id
return redirect("/success")
def logout(request):
# del request.session['id']
request.session.clear()
return redirect("/")
def registration(request):
if request.method == "POST":
#Check errors
errors = User.objects.RegForm_Validator(request.POST)
if len(errors):
# if the errors object contains anything, loop through each key-value pair and make a flash message
for key, value in errors.items():
messages.error(request, value)
return redirect('/')
else:
fName = request.POST['fName']
lName = request.POST['lName']
email = request.POST['email']
birthdate = request.POST["birthday"]
password = request.POST['password']
hashedPass = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
print("PAssword: ", password)
print("hashed password: ", hashedPass)
print("Whats the salt: ", bcrypt.gensalt())
user = User.objects.create(fName=fName, lName=lName, email=email, birthdate=birthdate, password=hashedPass)
request.session['id'] = User.objects.get(email=email).id
users = User.objects.all().order_by("-created_at")
context = { "user": user, "users": users}
return render(request, "logreg_app/success.html", context)
Models.py ---- Внизу вы увидите упомянутые выше операторы печати.
from __future__ import unicode_literals
import bcrypt
import re
import datetime
from django.contrib import messages
class UserManager(models.Manager):
#Login Form:
def LogForm_Validator(self, postData):
errors = {}
email = postData['logemail']
user = User.objects.get(email=postData['logemail'])
print("Print user LOGFORM: ", user)
# Email Vlidations:
if not EMAILREGEX.match(postData['logemail']):
errors['email'] = "Your email must be valid characters only!"
if len(User.objects.filter(email=email)) == 0:
errors['user_exists'] = 'Account does not exist'
else:
print("test display of logpassword:", postData['logpassword'])
print("user password: ", user.password)
print("what the encoded password we are seeing?", user.password.encode());
# THIS RIGHT HERE IS THE ISSUE... THE ENCODED POSTDATE LOGPASSWORD, IS NOT BEING HASHED
print('what is the encoded password from logpassword? ', postData['logpassword'].encode())
print("TEst 2 post data encode: ", postData['logpassword'].encode())
if bcrypt.checkpw(postData['logpassword'].encode(), user.password.encode()):
print("password match")
else:
print("failed password")
errors['pw_match'] = 'Password Incorrect!'
return errors