Я использую 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 или преобразовать что-нибудьг?