Spaces:
Paused
Paused
| const fs = require('fs'); | |
| const path = require('path'); | |
| const crypto = require('crypto'); | |
| const readline = require('readline'); | |
| const ADMIN_FILE = path.join(__dirname, '../data/admin.json'); | |
| // 创建readline接口 | |
| const rl = readline.createInterface({ | |
| input: process.stdin, | |
| output: process.stdout | |
| }); | |
| // 生成盐值 | |
| function generateSalt() { | |
| return crypto.randomBytes(16).toString('hex'); | |
| } | |
| // 使用盐值哈希密码 | |
| function hashPassword(password, salt) { | |
| return crypto.pbkdf2Sync(password, salt, 1000, 64, 'sha512').toString('hex'); | |
| } | |
| // 提示用户输入 | |
| function question(query) { | |
| return new Promise((resolve) => { | |
| rl.question(query, resolve); | |
| }); | |
| } | |
| async function main() { | |
| try { | |
| console.log('创建管理员账户\n'); | |
| // 获取用户输入 | |
| const username = await question('请输入管理员用户名: '); | |
| const password = await question('请输入管理员密码: '); | |
| // 生成盐值和密码哈希 | |
| const salt = generateSalt(); | |
| const hash = hashPassword(password, salt); | |
| // 创建管理员数据 | |
| const adminData = { | |
| admin: { | |
| username, | |
| salt, | |
| hash | |
| } | |
| }; | |
| // 确保data目录存在 | |
| const dataDir = path.dirname(ADMIN_FILE); | |
| if (!fs.existsSync(dataDir)) { | |
| fs.mkdirSync(dataDir, { recursive: true }); | |
| } | |
| // 写入文件 | |
| fs.writeFileSync(ADMIN_FILE, JSON.stringify(adminData, null, 2)); | |
| console.log('\n管理员账户创建成功!'); | |
| console.log('请妥善保管账户信息,不要将admin.json文件提交到版本控制系统。'); | |
| } catch (error) { | |
| console.error('创建管理员账户失败:', error); | |
| } finally { | |
| rl.close(); | |
| } | |
| } | |
| main(); |