- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
5.1 KiB
5.1 KiB
登录问题解决报告
问题描述
用户无法登录考培练系统(KPL开发环境)
问题排查过程
1. 初步检查
- ✅ 容器状态:所有容器正常运行
- ✅ 前端访问:https://kpl.ireborn.com.cn 可以访问
- ❌ 登录功能:提示"用户名或密码错误"
2. 发现的问题
问题1:数据库字段缺失
错误信息:
(pymysql.err.OperationalError) (1054, "Unknown column 'teams.is_deleted' in 'field list'")
解决方案:
ALTER TABLE teams ADD COLUMN is_deleted TINYINT(1) DEFAULT 0 COMMENT '是否已删除';
ALTER TABLE teams ADD COLUMN deleted_at DATETIME NULL COMMENT '删除时间';
问题2:system_logs表不存在
错误信息:
(pymysql.err.ProgrammingError) (1146, "Table 'kaopeilian.system_logs' doesn't exist")
解决方案:
CREATE TABLE IF NOT EXISTS system_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
level VARCHAR(20) COMMENT '日志级别',
type VARCHAR(50) COMMENT '日志类型',
user VARCHAR(100) COMMENT '用户',
user_id INT COMMENT '用户ID',
ip VARCHAR(100) COMMENT 'IP地址',
message TEXT COMMENT '日志消息',
user_agent VARCHAR(500) COMMENT '用户代理',
path VARCHAR(500) COMMENT '请求路径',
method VARCHAR(20) COMMENT '请求方法',
extra_data JSON COMMENT '额外数据',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_level (level),
INDEX idx_type (type),
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统日志表';
问题3:密码不正确
原因分析:
- 文档中记录的密码是
password123,但实际不正确 - KPL开发系统和演示系统的密码hash不同
- 通过测试演示系统,发现正确密码是
admin123
解决方案:
UPDATE users SET password_hash = '$2b$12$jFhkYU3.Cd1kAfr64/073eayPquAr0z9WWUQEdOyFRmAqcxz.i10C'
WHERE username IN ('admin', 'superadmin', 'testuser');
最终解决方案
正确的登录信息
所有系统统一密码:admin123
| 系统 | 域名 | 用户名 | 密码 |
|---|---|---|---|
| 开发系统 | https://kpl.ireborn.com.cn | admin | admin123 |
| 开发系统 | https://kpl.ireborn.com.cn | superadmin | admin123 |
| 开发系统 | https://kpl.ireborn.com.cn | testuser | admin123 |
| 演示系统 | https://aiedu.ireborn.com.cn | admin | admin123 |
| 演示系统 | https://aiedu.ireborn.com.cn | superadmin | admin123 |
| 演示系统 | https://aiedu.ireborn.com.cn | 其他用户 | admin123 |
API端点信息
正确的登录API路径:
- ✅
/api/v1/auth/login - ❌
/api/auth/login(此路径不存在)
登录请求示例:
curl -X POST https://kpl.ireborn.com.cn/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
成功响应示例:
{
"code": 200,
"message": "登录成功",
"data": {
"user": {
"username": "admin",
"email": "admin@kaopeilian.com",
"full_name": "系统管理员",
"role": "admin",
...
},
"token": {
"access_token": "eyJhbGc...",
"refresh_token": "eyJhbGc...",
"token_type": "bearer"
}
}
}
根本原因分析
- 数据库结构不完整: KPL开发系统使用的初始化SQL脚本可能不是最新版本,缺少部分表和字段
- 密码文档错误: 文档中记录的密码与实际数据库中的密码hash不匹配
- 两套系统不一致: 开发系统和演示系统的数据初始化脚本不同
预防措施
1. 数据库初始化规范
- ✅ 使用统一的数据库初始化脚本
- ✅ 定期同步开发环境和演示环境的数据库结构
- ✅ 在脚本中包含所有必需的表和字段
2. 密码管理规范
- ✅ 在代码仓库中明确记录默认密码
- ✅ 提供密码重置工具脚本
- ✅ 首次登录强制修改密码
3. 文档管理规范
- ✅ 保持文档与实际系统一致
- ✅ 每次修改密码后更新文档
- ✅ 测试文档中的所有账号密码
已更新的文档
/root/aiedu/系统登录账号密码.md- 已更新为正确密码/root/aiedu/登录问题解决报告.md- 本报告
测试验证
开发系统测试
# 测试admin登录
curl -X POST https://kpl.ireborn.com.cn/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 结果:✅ 登录成功
演示系统测试
# 测试admin登录
curl -X POST https://aiedu.ireborn.com.cn/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 结果:✅ 登录成功
总结
所有登录问题已完全解决:
- ✅ 数据库结构完整
- ✅ 密码统一为
admin123 - ✅ 文档已更新
- ✅ 两套系统登录正常
解决时间: 2025-11-02
解决状态: ✅ 已完成