Python ошибка 'байтов' объект не имеет атрибута 'кодировать' - PullRequest
0 голосов
/ 18 марта 2020

У меня есть этот код, и я использую python 3.7

def hash_password(password):
    return bcrypt.hashpw(password.encode('utf8'), bcrypt.gensalt())


def credentials_valid(username, password):
    with session_scope() as s:
        user = s.query(User).filter(User.name.in_([username])).first()
        if user:
            return bcrypt.checkpw(password.encode('utf8'), user.password.encode('utf8'))
        else:
            return False

Но когда я пытаюсь запустить, я получаю эту ошибку:

return bcrypt.checkpw(password.encode('utf8'), user.password.encode('utf8'))
AttributeError: 'bytes' object has no attribute 'encode'

1 Ответ

1 голос
/ 18 марта 2020

checkpw (пароль, hashed_password) функция bcrypt принимает кодированные входы.

Ваши два параметра, пароль и hashed_password, если они в Unicode, должны быть закодированы. Это то, что вы сделали.
Однако параметр «пароля», который вы задали своей функции, кажется, уже закодирован как интерпретатор Python, передавший эту ошибку AttributeError.

Проверьте эту рабочую реализацию:

import bcrypt

password = "asd123"
hashed_password_encoded = bcrypt.hashpw(password.encode('utf8'), bcrypt.gensalt())
hashed_password = hashed_password_encoded.decode("utf8")

is_valid = bcrypt.checkpw(password.encode('utf8'), hashed_password.encode('utf8'))
print(is_valid)
...