fix: 设置默认账号为 demo/demo123,修复数据路径

问题修复:
1. ✅ 默认账号设置
   - db.rs: 默认密码改为 demo123
   - .env.template: 默认密码改为 demo123
   - install.sh: 默认密码改为 demo123

2. ✅ 数据路径动态化
   - db.rs: 使用 dirs::home_dir() 自动检测用户主目录
   - 默认路径: {HOME}/momentry_studio/data/users
   - 支持通过 MOMENTRY_DATA_DIR 环境变量自定义

验证脚本:
- scripts/verify_default_setup.sh: 验证默认账号和数据路径

目标:
- 安装后可直接使用 demo/demo123 登录
- 数据路径随用户主目录自动调整
- 适用于任何用户环境

影响:
- demo 用户: 密码固定为 demo123
- 数据路径: 自动检测 {HOME}/momentry_studio/data/users
- 安装即可使用,无需额外配置
This commit is contained in:
2026-10-12 15:35:22 +08:00
parent 12943a3f07
commit 313d42be2f
4 changed files with 241 additions and 20 deletions

View File

@@ -61,9 +61,9 @@ MOMENTRY_API_KEY=your_momentry_api_key_here
# ======================================== # ========================================
# 默认用户密码 # 默认用户密码
# ======================================== # ========================================
# 在安装时自动生成,或手动设置 # 默认密码: demo123
# 格式: demo_<random> # 可自定义修改
MOMENTRY_DEFAULT_PASSWORD=demo_change_this MOMENTRY_DEFAULT_PASSWORD=demo123
# ======================================== # ========================================
# SMB 共享配置 # SMB 共享配置

View File

@@ -124,19 +124,33 @@ echo ""
# 步骤 5.5: 初始化默认用户 # 步骤 5.5: 初始化默认用户
log_step "步骤 5.5/6: 初始化默认用户..." log_step "步骤 5.5/6: 初始化默认用户..."
# Generate a secure random password # Use demo123 as default password (can be overridden by MOMENTRY_DEFAULT_PASSWORD)
DEFAULT_PASSWORD="demo_$(openssl rand -hex 4)" DEFAULT_PASSWORD="demo123"
# Check if custom password is set
if [ -n "${MOMENTRY_DEFAULT_PASSWORD}" ]; then
DEFAULT_PASSWORD="${MOMENTRY_DEFAULT_PASSWORD}"
log_info "使用自定义密码: ${DEFAULT_PASSWORD}"
else
log_info "使用默认密码: demo123"
fi
# Set environment variable for password # Set environment variable for password
export MOMENTRY_DEFAULT_PASSWORD="${DEFAULT_PASSWORD}" export MOMENTRY_DEFAULT_PASSWORD="${DEFAULT_PASSWORD}"
log_info "默认用户密码: ${DEFAULT_PASSWORD}" log_info "========================================"
log_warn "请妥善保存此密码!" log_info "默认用户账号:"
log_info " 用户名: demo"
log_info " 密码: ${DEFAULT_PASSWORD}"
log_info "========================================"
log_warn "安装完成后请立即修改密码!"
# Save to .env file # Save to .env file
if [ -f "${SCRIPT_DIR}/.env" ]; then if [ -f "${SCRIPT_DIR}/.env" ]; then
# Remove old password if exists
sed -i.bak '/MOMENTRY_DEFAULT_PASSWORD/d' "${SCRIPT_DIR}/.env"
echo "" >> "${SCRIPT_DIR}/.env" echo "" >> "${SCRIPT_DIR}/.env"
echo "# Default user password (generated during installation)" >> "${SCRIPT_DIR}/.env" echo "# Default user password" >> "${SCRIPT_DIR}/.env"
echo "MOMENTRY_DEFAULT_PASSWORD=${DEFAULT_PASSWORD}" >> "${SCRIPT_DIR}/.env" echo "MOMENTRY_DEFAULT_PASSWORD=${DEFAULT_PASSWORD}" >> "${SCRIPT_DIR}/.env"
log_info "✅ 密码已保存到 .env 文件" log_info "✅ 密码已保存到 .env 文件"
fi fi

210
scripts/verify_default_setup.sh Executable file
View File

@@ -0,0 +1,210 @@
#!/bin/bash
# 验证默认账号和数据路径
echo "================================================================================
默认账号和数据路径验证
================================================================================
"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "项目根目录: ${PROJECT_ROOT}"
echo ""
# 1. 检查默认账号
echo "1. 检查默认账号设置"
echo "--------------------------------------------------------------------------------"
# 检查 db.rs
if grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo "✅ db.rs: 默认密码设置为 demo123"
else
echo "❌ db.rs: 默认密码未设置为 demo123"
fi
# 检查 .env.template
if grep -q "MOMENTRY_DEFAULT_PASSWORD=demo123" "${PROJECT_ROOT}/.env.template"; then
echo "✅ .env.template: 默认密码设置为 demo123"
else
echo "❌ .env.template: 默认密码未设置为 demo123"
fi
# 检查 install.sh
if grep -q 'DEFAULT_PASSWORD="demo123"' "${PROJECT_ROOT}/install.sh"; then
echo "✅ install.sh: 默认密码设置为 demo123"
else
echo "❌ install.sh: 默认密码未设置为 demo123"
fi
echo ""
# 2. 检查数据路径
echo "2. 检查数据路径设置"
echo "--------------------------------------------------------------------------------"
# 检查 db.rs 是否使用动态路径
if grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo "✅ db.rs: 使用动态路径 (dirs::home_dir())"
else
echo "❌ db.rs: 未使用动态路径"
fi
# 检查 db.rs 是否使用绝对路径
if grep -q 'momentry_studio/data/users' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo "✅ db.rs: 使用绝对路径 (momentry_studio/data/users)"
else
echo "❌ db.rs: 未使用绝对路径"
fi
# 检查 paths.rs 是否存在
if [ -f "${PROJECT_ROOT}/src-tauri/src/paths.rs" ]; then
echo "✅ paths.rs: 存在"
# 检查关键函数
if grep -q 'pub fn get_home_dir()' "${PROJECT_ROOT}/src-tauri/src/paths.rs"; then
echo " ✅ get_home_dir() 函数存在"
fi
if grep -q 'pub fn get_momentry_core_root()' "${PROJECT_ROOT}/src-tauri/src/paths.rs"; then
echo " ✅ get_momentry_core_root() 函数存在"
fi
else
echo "❌ paths.rs: 不存在"
fi
echo ""
# 3. 检查环境变量
echo "3. 检查环境变量模板"
echo "--------------------------------------------------------------------------------"
if [ -f "${PROJECT_ROOT}/.env.template" ]; then
echo "✅ .env.template 存在"
# 检查关键环境变量
if grep -q "MOMENTRY_DATA_DIR=" "${PROJECT_ROOT}/.env.template"; then
echo " ✅ MOMENTRY_DATA_DIR 配置存在"
fi
if grep -q "MOMENTRY_CORE_ROOT=" "${PROJECT_ROOT}/.env.template"; then
echo " ✅ MOMENTRY_CORE_ROOT 配置存在"
fi
if grep -q "STORAGE_ROOT=" "${PROJECT_ROOT}/.env.template"; then
echo " ✅ STORAGE_ROOT 配置存在"
fi
else
echo "❌ .env.template 不存在"
fi
echo ""
# 4. 模拟安装测试
echo "4. 模拟安装测试"
echo "--------------------------------------------------------------------------------"
# 检测当前用户
CURRENT_USER=$(whoami)
USER_HOME=$(eval echo ~${CURRENT_USER})
echo "当前用户: ${CURRENT_USER}"
echo "用户主目录: ${USER_HOME}"
echo ""
# 预期的数据路径
EXPECTED_DATA_DIR="${USER_HOME}/momentry_studio/data/users"
echo "预期数据路径: ${EXPECTED_DATA_DIR}"
# 检查是否存在数据库
if [ -d "${EXPECTED_DATA_DIR}" ]; then
echo "✅ 数据目录存在: ${EXPECTED_DATA_DIR}"
if [ -f "${EXPECTED_DATA_DIR}/demo.sqlite" ]; then
echo " ✅ demo.sqlite 存在"
# 检查用户表
sqlite3 "${EXPECTED_DATA_DIR}/demo.sqlite" "SELECT username FROM app_users WHERE username='demo';" 2>/dev/null && {
echo " ✅ demo 用户存在于数据库中"
} || {
echo " ⚠️ demo 用户不存在于数据库中"
}
else
echo " ⚠️ demo.sqlite 不存在"
fi
else
echo "⚠️ 数据目录不存在: ${EXPECTED_DATA_DIR}"
echo " 安装后将自动创建"
fi
echo ""
# 5. 总结
echo "================================================================================
验证总结
================================================================================
"
ISSUES=0
# 检查默认账号
if grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs" && \
grep -q "MOMENTRY_DEFAULT_PASSWORD=demo123" "${PROJECT_ROOT}/.env.template" && \
grep -q 'DEFAULT_PASSWORD="demo123"' "${PROJECT_ROOT}/install.sh"; then
echo "✅ 默认账号设置正确"
echo " 用户名: demo"
echo " 密码: demo123"
else
echo "❌ 默认账号设置有问题"
ISSUES=$((ISSUES + 1))
fi
echo ""
# 检查数据路径
if grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs" && \
grep -q 'momentry_studio/data/users' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo "✅ 数据路径使用动态路径"
echo " 自动检测用户主目录: ${USER_HOME}"
echo " 数据路径: ${EXPECTED_DATA_DIR}"
else
echo "❌ 数据路径未使用动态路径"
ISSUES=$((ISSUES + 1))
fi
echo ""
if [ $ISSUES -eq 0 ]; then
echo "================================================================================
✅ 所有检查通过
================================================================================
"
echo "准备状态:"
echo " ✅ 默认账号: demo / demo123"
echo " ✅ 数据路径: 自动检测用户主目录"
echo " ✅ 可安装到任何系统"
echo ""
echo "下一步:"
echo " 1. 运行安装: ./scripts/install.sh"
echo " 2. 验证安装: ./scripts/check_user_isolation.sh"
echo " 3. 测试登录: 用户名 demo, 密码 demo123"
else
echo "================================================================================
❌ 发现 ${ISSUES} 个问题
================================================================================
"
echo "需要修复的问题:"
if ! grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo " - db.rs 需要设置默认密码为 demo123"
fi
if ! grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then
echo " - db.rs 需要使用动态路径"
fi
fi
echo ""
echo "================================================================================
"

View File

@@ -52,9 +52,14 @@ CREATE INDEX IF NOT EXISTS idx_video_marks_file ON video_marks(file_uuid);
static DB_CONN: Mutex<Option<Connection>> = Mutex::new(None); static DB_CONN: Mutex<Option<Connection>> = Mutex::new(None);
fn db_path() -> PathBuf { fn db_path() -> PathBuf {
let base = std::env::var("MOMENTRY_DATA_DIR").unwrap_or_else(|_| "../data/users".to_string()); // Use dynamic path based on user home directory
let base = std::env::var("MOMENTRY_DATA_DIR").unwrap_or_else(|_| {
let home = dirs::home_dir()
.expect("Failed to get home directory");
format!("{}/momentry_studio/data/users", home.display())
});
std::fs::create_dir_all(&base).ok(); std::fs::create_dir_all(&base).ok();
PathBuf::from(base).join("demo.sqlite") PathBuf::from(base).join("demo.sqlite") // TODO: Change to dynamic username
} }
pub fn init_db() -> Result<(), String> { pub fn init_db() -> Result<(), String> {
@@ -66,19 +71,11 @@ pub fn init_db() -> Result<(), String> {
// Add password_hash column if not exists (migration) // Add password_hash column if not exists (migration)
conn.execute("ALTER TABLE app_users ADD COLUMN password_hash TEXT", []).ok(); conn.execute("ALTER TABLE app_users ADD COLUMN password_hash TEXT", []).ok();
// Get default user credentials from environment or use generated values // Get default user credentials from environment or use demo123 as default
let default_id = "demo"; let default_id = "demo";
let default_user = "demo"; let default_user = "demo";
let default_password = std::env::var("MOMENTRY_DEFAULT_PASSWORD") let default_password = std::env::var("MOMENTRY_DEFAULT_PASSWORD")
.unwrap_or_else(|_| { .unwrap_or_else(|_| "demo123".to_string()); // Default: demo123
// Generate a random password if not set
use std::time::{SystemTime, UNIX_EPOCH};
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs();
format!("demo_{}", timestamp % 1000000) // demo_123456
});
// Check if demo user exists and has password // Check if demo user exists and has password
let password_hash: Option<String> = conn let password_hash: Option<String> = conn