Как исправить «TypeError: Unicode-объекты должны быть закодированы перед хэшированием» на bcrypt.hashpw - PullRequest
0 голосов
/ 26 января 2019

Я настраиваю сервер, и на своей странице входа в систему я использую функцию hashpw byrrpt для хеширования паролей перед их сохранением в базе данных. Когда я нажимаю «Войти», я получаю сообщение об ошибке «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 должны быть закодированы. Если вы знаете что-то, что может помочь, я ценю вашу помощь!

...