You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:04:15