File size: 1,855 Bytes
dc70e52 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
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(); |