Bcrypt Python3 Django: недопустимая соляная ошибка - PullRequest
0 голосов
/ 12 сентября 2018

Итак, я просто пытался создать базовую учетную запись для входа и регистрации с пользовательскими проверками.Но по какой-то причине я постоянно получаю недопустимую ошибку соли, когда приходит время попытаться войти в систему. Могу добавить, что способ настройки моего 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
...