flask-bcrypt: всегда проверяйте метод возврата пароля. Ошибка типа. - PullRequest
1 голос
/ 21 мая 2019

Я использую falsk-bcrypt и соединитель mysql для подключения к базе данных mySQL, все выглядит хорошо, когда я регистрируюсь на своем веб-сайте и сохраняю хешированный пароль, когда я вхожу в систему и проверяю ввод пароля пользователя и сравниваю егок хешированному паролю, используя bcrypt.check_password_hash(), он всегда возвращает различные ошибки, такие как

TypeError: ожидаемая строка или байтовоподобный объект

или когда я сбрасываю параметры в методе bcrypt.check_password_hash()

Я пытался декодировать хешированный пароль, прежде чем он сохранится в базе данных, и вот что я получаю в своей базе данных

$2b$12$t4uE4WxdWWv5pbNNF5Njk.viBxx/3AGYJx3aUxL20kH9cb0jTfqf2

мой столбец паролей varchar (100), и я использовал tinytext ()и эта же проблема появляется

также я пытался преобразовать хешированный пароль и пароль ввода пользователя в строки, используя метод str ()

вот код для вставки пароля (страница регистрации):

@app.route('/sign_up' , methods=['POST', 'GET'])
def sign_up():
    form = register_form() # imported from forms.py file as a class
    db.connect()
    if form.validate_on_submit():
        first_name = form.first_name.data
        last_name = form.last_name.data
        email = form.email.data
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        cur.execute("SELECT email FROM users WHERE email ='%s'", (email))
        email_exsist = cur.fetchone()
        if email_exsist:

            flash ('email is already exisist','danger')
        else :    

            cur.execute('INSERT INTO users(first_name, last_name,email,password) VALUES(%s,%s,%s,%s)''',(first_name, last_name, email, hashed_password) )
            db.commit()
            flash(f'Account Successfully created for {form.first_name.data + " " + form.last_name.data} !' , 'success' )

            return redirect(url_for('sign_up'))
            cur.close()

    return render_template('sign_up.html' , title='Sign up' , form= form)

и вот проверочный оператор if в (страница входа):

@app.route('/login' , methods=['POST', 'GET'])
def login():
    form = login_form()# imported from forms.py file as a class
    email = form.email.data
    if form.validate_on_submit():
        cur.execute("SELECT email FROM users WHERE email =%s", [email])
        user_email = cur.fetchone()
        cur.execute("SELECT password FROM users WHERE email =%s",[email])
        hashed_password = cur.fetchone()
        if user_email and bcrypt.check_password_hash( hashed_password,form.password.data) :
            login_user(user_email,remember=form.remember.data)
            return redirect(url_for('home'))
        else :
            flash ('Unable to log in , please check your email and password', 'danger')

    return render_template('login.html' , title='login' , form= form)

есть что-нибудь, что можно добавить в app.config или преобразовать что-нибудьг?

...