Browse Source

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

- 实现ensureAdminExists方法,确保admin用户存在
- 登录时检查管理员账户,不存在则自动创建默认管理员
- 添加管理员默认账号密码配置(admin/admin123)

♻️ refactor(auth): 优化日志记录方式

- 引入debug模块替代console.error进行日志记录
- 创建专用logger对象区分不同级别日志
- 替换登录错误处理中的console.error为logger.error

🔧 chore(auth): 添加必要的类型导入和常量定义

- 导入DisabledStatus类型用于用户状态管理
- 定义ADMIN_USERNAME和ADMIN_PASSWORD常量
yourname 5 months ago
parent
commit
d2ab3d7bba
1 changed files with 35 additions and 1 deletions
  1. 35 1
      src/server/modules/auth/auth.service.ts

+ 35 - 1
src/server/modules/auth/auth.service.ts

@@ -1,9 +1,18 @@
 import jwt from 'jsonwebtoken';
 import { UserService } from '../users/user.service';
 import { UserEntity as User } from '../users/user.entity';
+import { DisabledStatus } from '@/share/types';
+import debug from 'debug';
+
+const logger = {
+  info: debug('backend:auth:info'),
+  error: debug('backend:auth:error')
+}
 
 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 +21,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 +61,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;
     }
   }