fix: DevTools 读取 .env 管理员凭据 + 统一 main.go 密码 fallback
两个问题导致用户无法用 .env 中的管理员账户登录: 1. DevTools 未读取 backend/.env,始终传 admin/cyrene-dev-admin 给 gateway 2. gateway main.go 中创建管理员时独立读取 os.Getenv 并以 "admin123" 为 fallback,与 config.go 的 cfg.AdminPassword 不一致 修复: - config.js: 启动时加载 backend/.env 到 process.env (不覆盖已有环境变量) - main.go: 移除独立的 os.Getenv 读取,统一使用 cfg.AdminPassword Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -64,11 +64,7 @@ func main() {
|
|||||||
log.Printf("⚠ 查询管理员用户失败: %v", err)
|
log.Printf("⚠ 查询管理员用户失败: %v", err)
|
||||||
} else if existingAdmin == nil {
|
} else if existingAdmin == nil {
|
||||||
log.Printf("🔧 未找到管理员用户,创建默认 %s (username: %s)...", cfg.AdminUsername, cfg.AdminUsername)
|
log.Printf("🔧 未找到管理员用户,创建默认 %s (username: %s)...", cfg.AdminUsername, cfg.AdminUsername)
|
||||||
// 优先使用环境变量 ADMIN_PASSWORD,否则回退到 "admin123"
|
defaultAdminPassword := cfg.AdminPassword
|
||||||
defaultAdminPassword := os.Getenv("ADMIN_PASSWORD")
|
|
||||||
if defaultAdminPassword == "" {
|
|
||||||
defaultAdminPassword = "admin123"
|
|
||||||
}
|
|
||||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(defaultAdminPassword), bcrypt.DefaultCost)
|
passwordHash, err := bcrypt.GenerateFromPassword([]byte(defaultAdminPassword), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("⚠ 管理员密码哈希生成失败: %v", err)
|
log.Printf("⚠ 管理员密码哈希生成失败: %v", err)
|
||||||
|
|||||||
@@ -14,6 +14,29 @@ const ROOT = path.resolve(__dirname, '../..');
|
|||||||
|
|
||||||
const isWin = os.platform() === 'win32';
|
const isWin = os.platform() === 'win32';
|
||||||
|
|
||||||
|
// 读取 backend/.env 文件,将值合并到 process.env(不覆盖已有的环境变量)
|
||||||
|
// 这样 DevTools 启动各服务时能传递用户配置的凭据
|
||||||
|
function loadEnvFile() {
|
||||||
|
const envPath = path.join(ROOT, 'backend', '.env');
|
||||||
|
try {
|
||||||
|
const content = fs.readFileSync(envPath, 'utf-8');
|
||||||
|
for (const line of content.split('\n')) {
|
||||||
|
const trimmed = line.trim();
|
||||||
|
if (!trimmed || trimmed.startsWith('#')) continue;
|
||||||
|
const eqIdx = trimmed.indexOf('=');
|
||||||
|
if (eqIdx === -1) continue;
|
||||||
|
const key = trimmed.substring(0, eqIdx).trim();
|
||||||
|
const val = trimmed.substring(eqIdx + 1).trim();
|
||||||
|
if (key && val !== undefined) {
|
||||||
|
process.env[key] = process.env[key] || val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// .env 文件不存在,使用默认值
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadEnvFile();
|
||||||
|
|
||||||
/** 跨平台 Go 二进制路径 */
|
/** 跨平台 Go 二进制路径 */
|
||||||
function findGoBin() {
|
function findGoBin() {
|
||||||
// 优先使用环境变量
|
// 优先使用环境变量
|
||||||
|
|||||||
Reference in New Issue
Block a user