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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user