Skip to content

Latest commit

 

History

History
287 lines (207 loc) · 6.52 KB

File metadata and controls

287 lines (207 loc) · 6.52 KB

🚀 系统优化升级指南

本文档说明如何使用已完成的 4 个高优先级优化功能。


✅ 完成的优化项

1. 密码加密存储(bcrypt)

  • ✅ 使用 bcrypt 加密算法
  • ✅ 支持自动哈希生成和验证
  • ✅ 符合工业级安全标准

2. JWT 身份认证中间件

  • ✅ 使用 JWT Token 进行身份验证
  • ✅ Token 有效期 7 天
  • ✅ 所有敏感接口需要认证

3. 聊天历史按用户隔离

  • ✅ 每个用户只能看到自己的对话记录
  • ✅ 清空历史只删除当前用户的记录
  • ✅ 数据隔离更安全

4. 数据库连接池优化

  • ✅ 连接池大小: 10
  • ✅ 最大溢出连接: 20
  • ✅ 连接预检测: 启用
  • ✅ 性能大幅提升

📋 升级步骤

步骤 1:安装依赖

cd qwen_rag
pip install -r requirements.txt

主要新增依赖:

  • passlib[bcrypt] - 密码加密
  • python-jose[cryptography] - JWT Token
  • bcrypt - 加密算法

步骤 2:执行数据库迁移

重要:在启动服务器前必须执行迁移脚本!

python migrate_database.py

迁移脚本会自动完成:

  1. chat_history 表添加 username 字段
  2. username 字段添加索引
  3. 将现有用户的明文密码转换为 bcrypt 加密格式

预期输出:

============================================================
🚀 开始数据库迁移
============================================================
📊 [Migration] 正在迁移 ChatHistory 表...
   ✅ 已添加 username 字段
   ✅ 已添加 username 索引

🔐 [Migration] 正在迁移用户密码...
   ✅ 已迁移用户: admin
   ✅ 成功迁移 1 个用户的密码

🔍 [Verification] 验证迁移结果...
   ✅ 用户表: 1 条记录
   ✅ 聊天历史表: 0 条记录
   ✅ ChatHistory 字段: id, username, role, content, time

============================================================
🎉 所有迁移任务已成功完成!
============================================================

步骤 3:启动服务器

python server.py

服务器会在启动时预热 RAG 系统。

步骤 4:测试新功能

4.1 测试用户注册(新增接口)

curl -X POST http://localhost:8000/register \
  -H "Content-Type: application/json" \
  -d '{"username": "testuser", "password": "123456"}'

响应:

{
  "status": "success",
  "message": "注册成功"
}

4.2 测试登录(返回 Token)

curl -X POST http://localhost:8000/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "123456"}'

响应:

{
  "status": "success",
  "message": "登录成功",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "username": "admin"
}

重要:请保存返回的 token,后续请求需要使用。

4.3 测试智能问答(需要 Token)

curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"question": "你好", "username": "admin"}'

4.4 测试历史记录(按用户隔离)

curl -X GET http://localhost:8000/get_history \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"

只会返回当前用户的历史记录。

4.5 测试清空历史(按用户隔离)

curl -X POST http://localhost:8000/clear_history \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"

只会删除当前用户的历史记录。


📱 移动端更新

移动端(KivyMD)已自动适配新的认证机制:

主要变化:

  1. 登录时自动保存 Token

    • Token 存储在 ChatApp.access_token
    • 登录成功后自动设置
  2. 所有请求自动添加认证头

    • 使用 _get_auth_headers() 方法
    • 格式:Authorization: Bearer <token>
  3. Token 失效提示

    • 401 状态码自动提示"认证失败,请重新登录"

无需修改的功能:

  • 登录界面
  • 聊天界面
  • 文件上传
  • 历史记录加载

🔒 安全性提升

1. 密码安全

  • ❌ 旧版:明文存储(password: "123456"
  • ✅ 新版:bcrypt 加密(password: "$2b$12$xyz..."

2. 身份验证

  • ❌ 旧版:无验证,任何人可以访问
  • ✅ 新版:JWT Token,7 天有效期

3. 数据隔离

  • ❌ 旧版:所有用户共享历史记录
  • ✅ 新版:每个用户独立的数据空间

4. 连接池

  • ❌ 旧版:默认配置,高并发性能差
  • ✅ 新版:优化配置,支持 10+20 并发

🐛 常见问题

Q1: 迁移后无法登录?

原因:旧密码已转为加密格式,但客户端可能缓存了旧会话。

解决

  1. 清除浏览器缓存
  2. 使用原密码重新登录(系统已自动转换)

Q2: 提示"无法验证身份凭证"?

原因:Token 过期或无效。

解决:重新登录获取新 Token。

Q3: 移动端提示"认证失败"?

原因:旧版 APK 未包含认证逻辑。

解决

  1. 重新打包 APK(使用更新后的 main.py)
  2. 或等待 Token 自然过期后重新登录

Q4: 数据库迁移失败?

原因:MySQL 连接配置错误或权限不足。

解决

  1. 检查 server.py 中的数据库连接字符串
  2. 确保 MySQL 用户有 ALTER TABLE 权限
  3. 手动执行 SQL:
ALTER TABLE chat_history ADD COLUMN username VARCHAR(50) DEFAULT 'default' AFTER id;
ALTER TABLE chat_history ADD INDEX idx_username (username);
ALTER TABLE users MODIFY COLUMN password VARCHAR(255);

🎯 性能对比

指标 旧版 新版 提升
登录验证 明文比对 bcrypt 安全性 ↑↑↑
并发连接 默认 5 池化 30 性能 ↑600%
数据隔离 完全隔离 安全性 ↑↑↑
Token 验证 JWT 安全性 ↑↑↑

📞 技术支持

如遇到问题,请检查:

  1. Python 版本:建议 3.8+
  2. MySQL 版本:建议 5.7+
  3. 依赖安装完整性:pip list | grep -E "passlib|jose|bcrypt"

🔄 回滚方案(如果需要)

如果升级后出现严重问题,可以回滚:

  1. 恢复数据库(如果有备份):
mysql -u root -p rag_db < backup.sql
  1. 使用旧版代码
git checkout <旧版本commit>

📝 后续优化建议

  • 添加 Redis 缓存历史记录
  • 实现 Token 刷新机制
  • 添加 API 访问日志
  • 实现 CORS 跨域支持
  • 添加单元测试
  • 性能监控(Prometheus)

🎉 完成!

系统已成功升级到企业级安全标准,可以放心使用!