在BcryptPython中使用SQLite返回作为密码字段

问题描述

我想检查输入的密码是否与数据库中存储的密码相同,但是当我使用bcrypt.checkpw()时,由于SQL查询返回一个元组,它返回一条错误消息,要求输入字符串或字节。我找不到将数据库响应转换为元组的字节以使其兼容的方法

sql = ''' SELECT password FROM user_data WHERE username=? '''

username = input('Input username: ')
password = bytes(input('Input Password: '),encoding='utf-8')

cur = conn.cursor()
cur.execute(sql,(username,))
rows = cur.fetchall()

for row in rows:

    if bcrypt.checkpw(password,row):
        details = (user_id,username,password)
        print('logged in')

        return details

        break

解决方法

在函数中简单地添加row [0]就解决了这个问题,因为它返回了元组中的第一个(也是唯一的)值。

像列表一样处理

Extracting the a value from a tuple when the other values are unused