fix: 创建users表 + 用户认证系统 (REG1) — 第1轮调试修复

新增 user_store.go 实现 users 表自动建表和 CRUD
注册使用 bcrypt 哈希密码存入 users 表
登录从 users 表查询用户并验证密码
启动时自动种子 admin/admin123 用户
调试文档: docs/debug/2026-05-20-round1-regression-verification.md
This commit is contained in:
2026-05-20 13:52:12 +08:00
parent 4b35736f73
commit 9dd1582987
5 changed files with 338 additions and 44 deletions
+31 -1
View File
@@ -11,6 +11,8 @@ import (
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"golang.org/x/crypto/bcrypt"
"github.com/yourname/cyrene-ai/gateway/internal/config"
"github.com/yourname/cyrene-ai/gateway/internal/engine"
"github.com/yourname/cyrene-ai/gateway/internal/handler"
@@ -50,6 +52,34 @@ func main() {
sessionStore = s
log.Println("✅ 会话持久化存储已启用 (PostgreSQL)")
// 初始化 users 表
if err := store.CreateUsersTable(s.DB()); err != nil {
log.Printf("⚠ 创建 users 表失败: %v", err)
} else {
log.Println("✅ Users 表已就绪")
}
// 种子数据:如果没有 admin 用户,创建默认 admin
if existingAdmin, err := store.GetUserByUsername(s.DB(), cfg.AdminUsername); err != nil {
log.Printf("⚠ 查询管理员用户失败: %v", err)
} else if existingAdmin == nil {
log.Println("🔧 未找到管理员用户,创建默认 admin (username: admin, password: admin123)...")
// 使用默认密码 "admin123" 作为种子密码
defaultAdminPassword := "admin123"
passwordHash, err := bcrypt.GenerateFromPassword([]byte(defaultAdminPassword), bcrypt.DefaultCost)
if err != nil {
log.Printf("⚠ 管理员密码哈希生成失败: %v", err)
} else {
if _, err := store.CreateUser(s.DB(), cfg.AdminUsername, string(passwordHash), true); err != nil {
log.Printf("⚠ 创建默认管理员失败: %v", err)
} else {
log.Println("✅ 默认管理员用户已创建 (username: admin, password: admin123)")
}
}
} else {
log.Println("✅ 管理员用户已存在")
}
// 初始化提醒存储(复用同一数据库连接)
if rs, err := store.NewReminderStore(s.DB()); err != nil {
log.Printf("⚠ 提醒存储初始化失败: %v", err)
@@ -73,7 +103,7 @@ func main() {
automationStore = as
log.Println("✅ 自动化持久化存储已启用 (PostgreSQL)")
}
// 初始化文件存储(复用同一数据库连接)
if fs, err := store.NewFileStore(s.DB()); err != nil {
log.Printf("⚠ 文件存储初始化失败: %v", err)