如何修复bcrypt.hashpw上的“ TypeError:哈希之前必须对Unicode对象进行编码”

时间:2019-01-25 22:24:42

标签: python-3.x flask sqlite bcrypt

我正在设置服务器,并在登录页面上使用bycrpt的hashpw函数对密码进行哈希处理,然后再将密码存储在数据库中。当我单击登录时,收到错误消息“ TypeError:在散列之前必须对Unicode对象进行编码”,我曾尝试在多个位置使用.encode()和.encdoe('utf-8')对密码进行散列之前对密码进行编码和时间。

这是Windows Server 2019的副本(在AWS EC2实例上),运行Python 3.7和Sqlite3。这段时间运行良好,当我更换计算机时,它停止工作。

这是我登录页面的代码:

def loginpage():
    global error
    if request.method == "POST":
        usrname = request.form['username']
        pswd = request.form['password']
        if not db.checkExists(usrname):
            error = "Invalid username or password!"
        elif not db.checkValidUser(usrname, pswd.encode('utf-8')):
            error = "Invalid username or password!"
        else:
            session['loggedIn'] = True
            session['user'] = request.form['username']
            if session.get('prevurl') == None:
                return redirect(url_for('index'))
            else:
                prev = session.get('prevurl')
                session['prevurl'] = ''
                return redirect(url_for(prev))
    return render_template('login.html', **globals())

这是我的数据库处理程序代码:

def checkValidUser(username, password):
    #get salt and hash passwords
    if not checkExists(username):
        return False
    salt = getSalt(username)
    salt = salt[0][0]
    #password = password.encode('utf-8')
    password = bcrypt.hashpw(password, salt)
    #connect to database
    con = sql.connect(sqlite_db_file)
    cur = con.cursor()
    cur.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
    validUser = cur.fetchall()
    con.close()

    if not validUser:
        return False
    return True

当我单击登录时,我应该看到错误提示“用户名或密码错误”,或者在登录时重定向到主页。相反,我收到typeError告诉我必须对unicode对象进行编码。如果您知道有什么可以帮助的,我感谢您的帮助!

0 个答案:

没有答案