备份:修复前完整项目快照 2026-04-19
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
// 数据库迁移:添加 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 };
|
||||
Reference in New Issue
Block a user