88 lines
3.0 KiB
JavaScript
88 lines
3.0 KiB
JavaScript
|
|
/**
|
|||
|
|
* 创建默认管理员账号
|
|||
|
|
* 在数据库和表已经创建后运行此脚本
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
require('dotenv').config();
|
|||
|
|
const mysql = require('mysql2/promise');
|
|||
|
|
const bcrypt = require('bcryptjs');
|
|||
|
|
|
|||
|
|
// 数据库配置
|
|||
|
|
const dbConfig = {
|
|||
|
|
host: process.env.DB_HOST,
|
|||
|
|
port: process.env.DB_PORT,
|
|||
|
|
user: process.env.DB_USER,
|
|||
|
|
password: process.env.DB_PASSWORD,
|
|||
|
|
database: process.env.DB_DATABASE || 'ddcz_platform'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
async function createAdminUser() {
|
|||
|
|
let connection;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
console.log('🔌 正在连接到MySQL数据库...');
|
|||
|
|
console.log(` 数据库: ${dbConfig.database}`);
|
|||
|
|
|
|||
|
|
connection = await mysql.createConnection(dbConfig);
|
|||
|
|
console.log('✅ 数据库连接成功!\n');
|
|||
|
|
|
|||
|
|
// 生成管理员密码哈希
|
|||
|
|
console.log('🔐 正在生成管理员密码...');
|
|||
|
|
const defaultPassword = 'admin123456';
|
|||
|
|
const passwordHash = await bcrypt.hash(defaultPassword, 10);
|
|||
|
|
console.log('✅ 密码哈希生成成功!\n');
|
|||
|
|
|
|||
|
|
// 插入或更新管理员账号
|
|||
|
|
console.log('👤 正在创建管理员账号...');
|
|||
|
|
const [result] = await connection.query(`
|
|||
|
|
INSERT INTO users (username, password_hash, email, role, status)
|
|||
|
|
VALUES (?, ?, ?, ?, ?)
|
|||
|
|
ON DUPLICATE KEY UPDATE
|
|||
|
|
password_hash = VALUES(password_hash),
|
|||
|
|
email = VALUES(email),
|
|||
|
|
updated_at = CURRENT_TIMESTAMP
|
|||
|
|
`, ['admin', passwordHash, 'admin@ddcz.com', 'admin', 'active']);
|
|||
|
|
|
|||
|
|
if (result.affectedRows > 0) {
|
|||
|
|
console.log('✅ 管理员账号创建/更新成功!\n');
|
|||
|
|
console.log('📝 管理员登录信息:');
|
|||
|
|
console.log(' 用户名: admin');
|
|||
|
|
console.log(' 密码: admin123456');
|
|||
|
|
console.log(' ⚠️ 请在首次登录后立即修改密码!\n');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 验证表是否存在
|
|||
|
|
console.log('📊 验证数据库表...');
|
|||
|
|
const [tables] = await connection.query('SHOW TABLES');
|
|||
|
|
console.log(`✅ 数据库中共有 ${tables.length} 个表:`);
|
|||
|
|
tables.forEach(table => {
|
|||
|
|
const tableName = Object.values(table)[0];
|
|||
|
|
console.log(` - ${tableName}`);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('\n🎉 管理员账号设置完成!');
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('\n❌ 操作失败:');
|
|||
|
|
console.error(error.message);
|
|||
|
|
|
|||
|
|
if (error.code === 'ECONNREFUSED') {
|
|||
|
|
console.error('\n💡 无法连接到MySQL服务器');
|
|||
|
|
} else if (error.code === 'ER_ACCESS_DENIED_ERROR') {
|
|||
|
|
console.error('\n💡 用户名或密码错误');
|
|||
|
|
} else if (error.code === 'ER_NO_SUCH_TABLE') {
|
|||
|
|
console.error('\n💡 表不存在,请先在Navicat中执行 database-setup.sql');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
process.exit(1);
|
|||
|
|
} finally {
|
|||
|
|
if (connection) {
|
|||
|
|
await connection.end();
|
|||
|
|
console.log('🔌 数据库连接已关闭');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 执行
|
|||
|
|
createAdminUser();
|