Flask应用中使用bcrypt出现异常错误求助
解决Flask中bcrypt的AttributeError: 'bcrypt._bcrypt' has no attribute 'hashpass'问题
问题根源:
hashpass是bcrypt旧版本(2.0.x及更早)的API,3.x以上版本已移除该方法,改用标准的hashpw(哈希密码)和checkpw(验证密码)方法。修正密码验证代码
替换你当前使用hashpass的验证逻辑,改用checkpw:import bcrypt from flask import request # 从数据库获取存储的哈希密码(注意:如果存的是字符串,需先转成bytes) stored_hashed_pw = user.password_hash.encode('utf-8') # 用户输入的密码转成bytes input_pw = request.form.get('password').encode('utf-8') # 执行验证 if bcrypt.checkpw(input_pw, stored_hashed_pw): # 验证通过逻辑 return "登录成功" else: # 验证失败逻辑 return "密码错误"哈希密码的正确写法(用于用户注册时):
import bcrypt user_password = "用户输入的密码".encode('utf-8') # 生成盐值 salt = bcrypt.gensalt() # 生成哈希密码 hashed_pw = bcrypt.hashpw(user_password, salt) # 将hashed_pw存入数据库(可直接存bytes,或转成字符串存储:hashed_pw.decode('utf-8'))确保安装正确版本的bcrypt
卸载旧版本后安装最新稳定版:pip uninstall bcrypt -y pip install bcrypt>=4.0.0注意:如果使用虚拟环境,务必在激活虚拟环境后执行上述命令,避免全局包冲突。
排查命名冲突
检查你的Flask项目目录下是否存在名为bcrypt.py的文件,这会导致Python导入时优先加载本地文件而非官方库,需立即重命名该文件。同时确认导入语句是import bcrypt,而非错误的子模块导入。
内容的提问来源于stack exchange,提问作者Pallai
相关产品推荐
相关产品推荐

