TypeError TypeError: argument 'hashed_password': 'str' object cannot be converted to 'PyBytes'
时间: 2024-11-25 07:01:02 浏览: 8
在您的代码中,`bcrypt.hashpw` 函数需要一个字节字符串(`bytes`)作为输入,但您传递的是一个普通的字符串(`str`)。这导致了 `TypeError`。
### 解决方法:
将密码从字符串转换为字节字符串,然后再进行哈希处理。具体来说,在 `register` 函数中,修改以下行:
```python
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
```
确保 `password` 在传递给 `bcrypt.hashpw` 之前被编码为字节字符串。
### 修改后的代码:
```python
@app.route('/register', methods=['GET', ' POST'])
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = connect_db()
cursor = conn.cursor()
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
try:
cursor.execute('INSERT INTO users (username, password) VALUES (%s, %s)', (username, hashed_password))
conn.commit()
flash("注册成功!", 'success')
logging.info("用户 %s 注册成功!", username)
return redirect(url_for('login'))
except mysql.connector.IntegrityError:
flash("用户名已存在!", 'warning')
logging.warning("用户名 %s 已存在!", username)
finally:
conn.close()
return render_template('register.html')
```
这样,`password` 将被正确地编码为字节字符串,并且可以顺利地进行哈希处理。
阅读全文