Flask-Security密码存明文且报des_crypt相关ValueError错误求助
解决Flask-Security密码明文存储及验证错误问题
我来帮你梳理下问题的根源和解决办法:
问题根源分析
你碰到的两个问题其实是关联的:
- 你配置了用
bcrypt做密码哈希,但没装对应的依赖包,Flask-Security自动 fallback 到默认的des_crypt算法,这就导致配置和实际使用的算法不匹配,触发了ValueError。 - 创建测试用户时直接传明文密码,因为缺少正确的哈希工具,密码没加密就直接存进数据库了。
分步解决步骤
1. 安装bcrypt依赖
先把配置里指定的bcrypt依赖装上:
pip install bcrypt
2. 修正用户创建代码
虽然Flask-Security的user_datastore.create_user理论上会自动哈希密码,但显式调用哈希工具更稳妥。修改你的create_user函数:
from flask_security.utils import hash_password @app.before_first_request def create_user(): db.create_all() # 用hash_password把明文密码转成哈希值 user_datastore.create_user(email='matt@nobien.net', password=hash_password('password')) db.session.commit()
3. 确认配置无误
再检查下你的配置项,确保没有拼写错误:
app.config['SECURITY_PASSWORD_HASH'] = 'bcrypt' # 注意:生产环境别硬写盐值,最好从环境变量读 app.config['SECURITY_PASSWORD_SALT'] = 'mypasswordsaltis12characterslong'
额外提示
- 要是不想用bcrypt,也可以换成Flask-Security支持的其他算法(比如
pbkdf2_sha256,这个不需要额外装依赖),记得同步修改配置就行。 - 生产环境里,
SECRET_KEY和SECURITY_PASSWORD_SALT绝对不能硬编码,得从环境变量或者安全的配置文件里读取,防止敏感信息泄露。
内容的提问来源于stack exchange,提问作者doingmybest
相关产品推荐
相关产品推荐

