如何转换< sqlite3.Row object at 0x0000019393a725f0>成明文?

xzv2uavs  于 2023-06-06  发布在  SQLite
关注(0)|答案(1)|浏览(173)

我在这里问了一个关于sqlite3错误的问题。”这句话的意思是:“在[r[0] for r in list]中有var。但是,这不适用于其他目的,如检查密码哈希。由于密码哈希值不总是相同的,因此我需要使用werkzeug中的to check_password_hash()函数。要做到这一点,我需要转换成明文,因为它不会让我分裂它<sqlite3.Row object at 0x0000019393a725f0>。有人知道怎么做吗?
这是我的代码,如果你好奇的话(不工作-第14行):

@app.route('/login', methods=["GET", "POST"])
def login():
    db = get_db()
    if current_user.is_authenticated:
        return redirect('/home')
    else:
        if request.method == "POST":
            id = request.form["id"]
            email = request.form["email"]
            db_id = db.execute('SELECT UserID FROM Users WHERE Email = \"%s\"' % email).fetchall()
            if int(id) in [r[0] for r in db_id]:
                password = request.form["password"]
                db_password = db.execute('SELECT Password FROM Users WHERE Email = \"%s\"' % email).fetchone()
                check = check_password_hash(db_password, password)
                if check == 'True':
                    user = User(id, email)
                    login_user(user)
                    return render_template('Home.html', title='Home Page')
                else:
                    return render_template('Exist.html', title='Login Page')
            else:
                return render_template('Exist.html', title='Login Page')

我尝试在[r[0]中使用var for r in list],但由于哈希值总是不同的,这不起作用。它也不允许我使用check_password_hash(password,db_password),因为“AttributeError:'sqlite3.Row'对象没有属性'split'。”我尝试将变量发送到html页面,但它显示为sqlite.Row对象,而不是实际数据。

wribegjk

wribegjk1#

当您从数据库中获取单个项时,fetchone()返回一个Tuple

password = request. Form["password"]
db_password = db.execute('SELECT Password FROM Users WHERE Email = \"%s\"' % email).fetchone()

如果您在该行后面输入print(db_password),您将看到如下内容:

("7ea3ef8bf512d82fec11e32a11175af0a803d834",)

密码散列是个废话。您需要更改下一行以使用元组的第一个元素:

check = check_password_hash(db_password[0], password)

相关问题