Kamixitong/password_fix_summary.md

61 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2025-12-12 11:35:14 +08:00
# 管理员密码哈希问题修复报告
## 问题描述
系统在启动时,初始化的管理员密码哈希值不正确,导致无法登录系统。
## 问题原因
1. **数据库初始化脚本问题**: `init_mysql.sql` 文件中第247行硬编码了错误的密码哈希值
- 错误的哈希: `pbkdf2:sha256:260000$7Q8M9V2N4P6R8S0T$8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6`
- 问题: salt和hash部分不是有效的编码格式
2. **正确的哈希格式**:
- 格式: `pbkdf2:sha256:iterations$salt_hex$hash_hex`
- 正确的哈希: `pbkdf2:sha256:600000$03EhhcMpfObidblD$e0f7de0e1028c8ab004c48ec28a3380950568080abd214055f67d02300e2786d`
## 修复方案
### 1. 重置数据库中的密码哈希
```python
from app import create_app, db
from app.models.admin import Admin
from werkzeug.security import generate_password_hash
app = create_app()
with app.app_context():
admin = Admin.query.filter_by(username='admin').first()
admin.password_hash = generate_password_hash('admin123', method='pbkdf2:sha256')
db.session.commit()
```
### 2. 修复初始化脚本
已更新 `init_mysql.sql` 文件,将错误的哈希值替换为正确的哈希值。
## 验证结果
### 测试用例
1. ✅ 使用正确密码 'admin123' 登录 - **成功**
2. ✅ 使用错误密码 'wrongpassword' 登录 - **被正确拒绝**
3. ✅ 使用空密码登录 - **被正确拒绝**
### 登录信息
- **用户名**: admin
- **密码**: admin123
- **状态**: ✅ 可以正常登录
## 后续建议
1. **修改默认密码**: 首次登录后请立即修改默认密码
2. **使用强密码**: 建议使用包含大小写字母、数字和特殊字符的强密码
3. **定期更换密码**: 建议每3-6个月更换一次密码
4. **启用双因素认证**: 如可能启用2FA增强安全性
## 相关文件
- `app/models/admin.py` - 管理员模型,包含密码验证逻辑
- `init_mysql.sql` - 数据库初始化脚本
- `reset_admin_password.py` - 密码重置脚本(已创建)
- `test_login_fixed.py` - 登录功能测试脚本(已创建)
## 总结
问题已完全修复。管理员可以使用用户名 `admin` 和密码 `admin123` 正常登录系统。