Files
Cyrene/docs/debug/2026-05-20-round1-regression-verification.md
T
AskaEth 9dd1582987 fix: 创建users表 + 用户认证系统 (REG1) — 第1轮调试修复
新增 user_store.go 实现 users 表自动建表和 CRUD
注册使用 bcrypt 哈希密码存入 users 表
登录从 users 表查询用户并验证密码
启动时自动种子 admin/admin123 用户
调试文档: docs/debug/2026-05-20-round1-regression-verification.md
2026-05-20 13:52:12 +08:00

7.5 KiB
Raw Blame History

持续性调试第1轮: 修复后回归验证

日期: 2026-05-20 时间: UTC+8 13:35 Commit: 4b35736 (fix: 修复19个Bug (P0-P3) — 持续性调试第7轮发现的问题) 上一轮: 持续性调试第7轮 (19个Bug已全部修复)


环境确认

项目 状态
SSH 隧道 活跃 (PID 23132, 端口转发: 5432, 6379, 4222, 8222, 6333, 6334, 9000, 9001)
PostgreSQL 可连接 (localhost:5432 - accepting connections)
数据库 cyrene_ai 存在 (14张表)
Gateway (8080) 新版编译启动 (PID 12619)
AI-Core (8081) 运行中 (PID 15037, 旧版)

编译验证

服务 结果 说明
gateway EXIT:0 go build -o ./cmd/gateway ./cmd/
ai-core EXIT:0 go build -o ./cmd/ai-core ./cmd/
memory-service EXIT:0 go build -o ./cmd/memory-service ./cmd/
tool-engine EXIT:0 go build -o ./cmd/tool-engine ./cmd/
voice-service EXIT:0 go build -o ./cmd/voice-service ./cmd/
iot-debug-service EXIT:0 go build -o ./cmd/iot-debug-service ./cmd/
前端 TypeScript EXIT:0 npx tsc --noEmit

结论: 所有 6 个 Go 服务 + 前端编译通过,无回归编译错误。


Bug 修复验证 (代码审查)

Bug ID 描述 文件 状态
P0#1 session ID 使用 crypto/rand session_handler.goimport "crypto/rand", line 580 rand.Read(b) + fallback 已修复
P0#3 goroutine defer recover (Hub.Run) hub.godefer func() { if r := recover(); r != nil { ... } }() 已修复
P0#4 goroutine defer recover (广播循环) hub.go — 同上方 已修复
P0#5 adminAuth 使用 is_admin 标记 auth.goc.Set(IsAdminKey, strings.HasPrefix(userID, "admin_")) + router.goc.Get(middleware.IsAdminKey) 已修复
P1#1 普通用户登录需密码验证 auth_handler.goverifyUserPassword() 调用, 使用 bcrypt + password_hash 查询 逻辑正确 (见下方 REG1)
P1#3 priority 范围扩展 0-10 提醒模块 (reminder_handler.go, reminder_store.go) 中未找到 priority 字段定义 ⚠️ 需确认

P1#3 详细说明: 在 reminder_handler.goreminder_store.go 中均未找到 priority 字段。priority 字段仅在 memory_handler.go 中存在 (记忆模块)。提醒模块可能使用不同的优先级机制或未实现此修复。


API 端到端测试

端点 方法 状态码 请求 响应摘要 结果
/api/v1/health GET 200 - {"service":"cyrene-gateway","status":"ok","ws_connections":0}
/api/v1/auth/register POST 400→201 nickname/verify_code → 补充后成功 {"token":"eyJ...","user_id":"user_testuser_..."}
/api/v1/auth/login (管理员) POST 200 yeij0942 / Jiang1143218570 {"token":"eyJ...","user_id":"admin_yeij0942"}
/api/v1/auth/login (普通用户) POST 500 任意非管理员用户名 {"error":"服务器内部错误"} (REG1)
/api/v1/sessions (无token) GET 401 - {"error":"未提供认证令牌"}
/api/v1/sessions (管理员token) GET 200 Bearer token {"sessions":[...]} 返回历史会话
/api/v1/sessions (POST 创建) POST 200 {"title":"回归测试会话"} {"id":"session_74fn67z6hp2v","title":"回归测试会话"}
/api/v1/admin/sessions (管理员) GET 200 Bearer admin token {"sessions":[],"total":0}

注册成功字段: username, password, email, nickname, verify_code ("000000" 开发阶段通行码)

管理员凭据验证: 从 .env 读取 — ADMIN_USERNAME=yeij0942, ADMIN_PASSWORD=Jiang1143218570,管理员的 user_id 格式为 admin_yeij0942admin_ 前缀触发 is_admin=true)。


新发现问题

REG1: users 表缺失导致普通用户登录 500

严重性: P2 现象: 非管理员用户登录时返回 {"error":"服务器内部错误"} (HTTP 500) 根因: auth_handler.goverifyUserPassword 查询 SELECT password_hash FROM users WHERE username = $1,但数据库中不存在 users。当前数据库只有 14 张业务表 (sessions, messages, memories 等),没有用户表。 影响: 普通用户登录不可用(管理员登录不受影响,因为走独立分支)。 修复方向:

  1. 创建 users 表 (id, username, password_hash, email, nickname, created_at)
  2. 注册时写入 users 表 (当前注册直接返回 token,不写入数据库)
  3. 或者:在 users 表不存在时,回退到内存/文件存储模式

REG2: backend/gateway/go.mod 未提交修改

严重性: P3 (低) 现象: git status 显示 M backend/gateway/go.mod 变更内容: golang.org/x/crypto v0.23.0// indirect 移至 require 直接依赖 (因为 auth_handler.go 直接 import bcrypt) 影响: 编译成功但 commit 不干净;其他开发者拉取后可能需手动 go mod tidy 修复方向: 提交 go.mod 变更或还原

REG3: P1#3 priority 范围修复需确认

严重性: P3 (低) 现象: 提醒模块 (reminder_handler.go, reminder_store.go) 中未找到 priority 字段相关定义 根因: P1#3 的 priority 范围修复可能仅在记忆模块实现,未同步到提醒模块;或者提醒模块不需要此字段 影响: 若提醒功能需要 priority 过滤,当前不支持 修复方向: 确认需求后决定是否需要在提醒模块添加 priority 字段


数据库完整性

表名 用途 状态
automation_rules 自动化规则
automation_scenes 自动化场景
daily_briefings 每日简报
files 文件管理
knowledge_bases 知识库
knowledge_chunks 知识块
knowledge_documents 知识文档
memories 记忆
memory_entries 记忆条目
messages 消息
reminders 提醒
sessions 会话
thinking_logs 思考日志
tool_call_logs 工具调用日志
users 用户 缺失

总结

19 个 Bug 的核心修复代码已落地:

  • P0#1: crypto/rand
  • P0#3/#4: goroutine defer recover
  • P0#5: adminAuth is_admin 标记
  • P1#1: 登录密码验证逻辑正确,但因 users 表缺失无法正常工作

新发现 3 个问题:

  • REG1 (P2): users 表缺失 — 需要在下一轮修复中创建
  • REG2 (P3): go.mod 未提交变更
  • REG3 (P3): P1#3 priority 修复覆盖范围需确认

编译与启动: 全部通过,无回归。 API 测试: 管理员流程完全正常,注册流程正常 (需正确 payload),普通用户登录受 REG1 阻塞。