|
|
|
|
@@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|