feat(auth): 添加默认管理员账户功能

- 新增ensureAdminExists方法用于确保管理员账户存在
- 在登录流程中自动创建默认管理员账户
- 使用logger替代console.error进行错误记录

 feat(logger): 扩展日志功能

- 新增info级别日志记录功能
- 统一使用logger进行日志输出
This commit is contained in:
D8D Developer
2025-07-07 06:47:21 +00:00
parent d371fbaefa
commit 0cc35e6351
2 changed files with 31 additions and 1 deletions

View File

@@ -1,9 +1,13 @@
import jwt from 'jsonwebtoken';
import { UserService } from '../users/user.service';
import { UserEntity as User } from '../users/user.entity';
import { logger } from '@/server/utils/logger';
import { DisabledStatus } from '@/share/types';
const JWT_SECRET = 'your-secret-key'; // 生产环境应使用环境变量
const JWT_EXPIRES_IN = '7d'; // 7天有效期
const ADMIN_USERNAME = 'admin';
const ADMIN_PASSWORD = 'admin123';
export class AuthService {
private userService: UserService;
@@ -12,8 +16,33 @@ export class AuthService {
this.userService = userService;
}
async ensureAdminExists(): Promise<User> {
try {
let admin = await this.userService.getUserByUsername(ADMIN_USERNAME);
if (!admin) {
logger.info('Admin user not found, creating default admin account');
admin = await this.userService.createUser({
username: ADMIN_USERNAME,
password: ADMIN_PASSWORD,
nickname: '系统管理员',
isDisabled: DisabledStatus.ENABLED
});
logger.info('Default admin account created successfully');
}
return admin;
} catch (error) {
logger.error('Failed to ensure admin account exists:', error);
throw error;
}
}
async login(username: string, password: string): Promise<{ token: string; user: User }> {
try {
// 确保admin用户存在
if (username === ADMIN_USERNAME) {
await this.ensureAdminExists();
}
const user = await this.userService.getUserByUsername(username);
if (!user) {
throw new Error('User not found');
@@ -27,7 +56,7 @@ export class AuthService {
const token = this.generateToken(user);
return { token, user };
} catch (error) {
console.error('Login error:', error);
logger.error('Login error:', error);
throw error;
}
}

View File

@@ -5,4 +5,5 @@ export const logger = {
api: debug('backend:api'),
db: debug('backend:db'),
middleware: debug('backend:middleware'),
info: debug('backend:info'),
};