Files
bidding_watcher/src/scripts/create-user.ts
dmy b6a6398864 feat: 添加用户认证系统
引入基于 Basic Auth 的用户认证系统,包括用户管理、登录界面和 API 鉴权
- 新增用户实体和管理功能
- 实现前端登录界面和凭证管理
- 重构 API 鉴权为 Basic Auth 模式
- 添加用户管理脚本工具
2026-01-18 12:47:16 +08:00

101 lines
2.7 KiB
TypeScript

import 'dotenv/config';
import { DataSource, DataSourceOptions } from 'typeorm';
import { User } from '../users/entities/user.entity';
import * as bcrypt from 'bcrypt';
// 数据库配置
const dbConfig: DataSourceOptions = {
type: (process.env.DATABASE_TYPE as any) || 'mysql',
host: process.env.DATABASE_HOST || 'localhost',
port: parseInt(process.env.DATABASE_PORT || '3306'),
username: process.env.DATABASE_USERNAME || 'root',
password: process.env.DATABASE_PASSWORD || 'root',
database: process.env.DATABASE_NAME || 'bidding',
entities: [User],
synchronize: false,
};
// 日志工具
const logger = {
log: (message: string, ...args: any[]) => {
console.log(`[INFO] ${new Date().toISOString()} - ${message}`, ...args);
},
error: (message: string, ...args: any[]) => {
console.error(`[ERROR] ${new Date().toISOString()} - ${message}`, ...args);
},
};
// 主函数
async function createUser() {
let dataSource: DataSource | null = null;
try {
// 从命令行参数获取用户名和密码
const args = process.argv.slice(2);
if (args.length < 2) {
console.log('用法: npm run user:create <用户名> <密码>');
console.log('示例: npm run user:create admin password123');
process.exit(1);
}
const username = args[0];
const password = args[1];
if (!username || username.trim().length === 0) {
logger.error('用户名不能为空');
process.exit(1);
}
if (!password || password.length === 0) {
logger.error('密码不能为空');
process.exit(1);
}
logger.log('开始创建用户...');
// 创建数据库连接
dataSource = new DataSource(dbConfig);
await dataSource.initialize();
logger.log('数据库连接成功');
// 检查用户名是否已存在
const userRepository = dataSource.getRepository(User);
const existingUser = await userRepository.findOne({
where: { username },
});
if (existingUser) {
logger.error(`用户名 ${username} 已存在`);
process.exit(1);
}
// 加密密码
const hashedPassword = await bcrypt.hash(password, 10);
// 创建用户
const user = userRepository.create({
username,
password: hashedPassword,
});
await userRepository.save(user);
logger.log(`用户 ${username} 创建成功!`);
logger.log(`用户 ID: ${user.id}`);
logger.log(`创建时间: ${user.createdAt}`);
await dataSource.destroy();
process.exit(0);
} catch (error) {
logger.error('创建用户失败:', error);
if (dataSource && dataSource.isInitialized) {
await dataSource.destroy();
}
process.exit(1);
}
}
// 执行创建用户
createUser();