Flask更新密码后无法登录问题排查求助
Flask密码更新功能登录失败问题排查与解决
核心问题
你的代码存在双重哈希的错误:
在change_password路由中,已经正确生成了密码哈希值hashed_password = bcrypt.generate_password_hash(new_password),但调用update_user_password函数时,函数内部又对传入的参数再次执行bcrypt.generate_password_hash(new_password)——这里的参数实际是已哈希的字符串,导致数据库存储的是哈希值的哈希,登录时验证自然不匹配。
修复代码
修改update_user_password函数,直接使用传入的已哈希密码:
def update_user_password(user_id, new_password): user = User.query.get(user_id) if user: # 移除重复的哈希生成,直接赋值传入的哈希结果 user.pwd = new_password db.session.commit()
路由中的哈希生成逻辑保持不变:
hashed_password = bcrypt.generate_password_hash(new_password) update_user_password(current_user.id, hashed_password)
额外检查项
- 确认
User模型的pwd字段长度足够,bcrypt哈希值通常为60字符,建议设置为String(128)或更长,避免截断导致验证失败。 - 验证登录逻辑是否正确使用
bcrypt.check_password_hash(user.pwd, 输入的明文密码)进行匹配。
内容的提问来源于stack exchange,提问作者Kabllez
相关产品推荐
相关产品推荐

