// 数据库迁移:添加 password_hash 字段到 users 表 const db = require('../db-sqlite'); const { hashPassword } = require('../utils/auth'); async function migrate() { try { console.log('开始迁移:添加 password_hash 字段...'); // 检查 password_hash 字段是否已存在 const result = await db.query("PRAGMA table_info(users)"); const hasPasswordHash = result.rows.some(row => row.name === 'password_hash'); if (hasPasswordHash) { console.log('✅ password_hash 字段已存在,跳过迁移'); return; } // 添加 password_hash 字段 await db.query("ALTER TABLE users ADD COLUMN password_hash TEXT"); console.log('✅ password_hash 字段添加成功'); // 获取所有用户,为现有用户设置默认密码哈希 // 注意:这会使用密码 '123456' 为所有用户生成哈希 // 首次登录后需要提示用户修改密码 const defaultPassword = '123456'; const defaultHash = hashPassword(defaultPassword); // 更新所有现有用户,将 plaintext password 迁移到 password_hash const usersResult = await db.query("SELECT id, password FROM users WHERE password_hash IS NULL"); console.log(`找到 ${usersResult.rows.length} 个需要迁移的用户`); for (const user of usersResult.rows) { // 如果已有明文密码,使用相同的密码生成哈希 // 如果没有明文密码,使用默认密码 const passwordToHash = user.password || defaultPassword; const hashedPassword = hashPassword(passwordToHash); await db.query( "UPDATE users SET password_hash = ? WHERE id = ?", [hashedPassword, user.id] ); console.log(` 用户 ID ${user.id} 密码已迁移`); } console.log('✅ 密码迁移完成'); console.log(''); console.log('⚠️ 重要提示:'); console.log(' - 现有用户密码已迁移(或使用默认密码 123456)'); console.log(' - 建议通知所有用户首次登录后修改密码'); console.log(' - 新注册用户的密码将自动使用哈希存储'); } catch (error) { console.error('❌ 迁移失败:', error.message); process.exit(1); } } // 如果是直接运行此脚本 if (require.main === module) { migrate().then(() => { console.log('\n迁移完成'); process.exit(0); }); } module.exports = { migrate };