Compare commits
2 Commits
cd86729115
...
d2ab3d7bba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2ab3d7bba | ||
|
|
cf0509ccd3 |
@@ -29,28 +29,34 @@ k8s:deployment:create # K8S-部署-创建
|
|||||||
|
|
||||||
### 前端示例
|
### 前端示例
|
||||||
```typescript
|
```typescript
|
||||||
// src/client/utils/logger.ts
|
// 在需要使用日志的文件中直接引入debug
|
||||||
import debug from 'debug';
|
import debug from 'debug';
|
||||||
|
|
||||||
export const logger = {
|
// 按需定义命名空间
|
||||||
error: debug('frontend:error'),
|
const errorLogger = debug('frontend:error');
|
||||||
api: debug('frontend:api'),
|
const apiLogger = debug('frontend:api');
|
||||||
auth: debug('frontend:auth'),
|
const authLogger = debug('frontend:auth');
|
||||||
ui: debug('frontend:ui')
|
const uiLogger = debug('frontend:ui');
|
||||||
};
|
|
||||||
|
// 使用示例
|
||||||
|
errorLogger('用户登录失败: %s', error.message);
|
||||||
|
apiLogger('API请求: %s', url);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 后端示例
|
### 后端示例
|
||||||
```typescript
|
```typescript
|
||||||
// src/server/utils/logger.ts
|
// 在需要使用日志的文件中直接引入debug
|
||||||
import debug from 'debug';
|
import debug from 'debug';
|
||||||
|
|
||||||
export const logger = {
|
// 按需定义命名空间
|
||||||
error: debug('backend:error'),
|
const errorLogger = debug('backend:error');
|
||||||
api: debug('backend:api'),
|
const apiLogger = debug('backend:api');
|
||||||
db: debug('backend:db'),
|
const dbLogger = debug('backend:db');
|
||||||
middleware: debug('backend:middleware')
|
const middlewareLogger = debug('backend:middleware');
|
||||||
};
|
|
||||||
|
// 使用示例
|
||||||
|
errorLogger('数据库连接失败: %s', error.message);
|
||||||
|
dbLogger('查询执行: %s', sql);
|
||||||
```
|
```
|
||||||
|
|
||||||
## 5. 最佳实践
|
## 5. 最佳实践
|
||||||
|
|||||||
@@ -1,9 +1,18 @@
|
|||||||
import jwt from 'jsonwebtoken';
|
import jwt from 'jsonwebtoken';
|
||||||
import { UserService } from '../users/user.service';
|
import { UserService } from '../users/user.service';
|
||||||
import { UserEntity as User } from '../users/user.entity';
|
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_SECRET = 'your-secret-key'; // 生产环境应使用环境变量
|
||||||
const JWT_EXPIRES_IN = '7d'; // 7天有效期
|
const JWT_EXPIRES_IN = '7d'; // 7天有效期
|
||||||
|
const ADMIN_USERNAME = 'admin';
|
||||||
|
const ADMIN_PASSWORD = 'admin123';
|
||||||
|
|
||||||
export class AuthService {
|
export class AuthService {
|
||||||
private userService: UserService;
|
private userService: UserService;
|
||||||
@@ -12,8 +21,33 @@ export class AuthService {
|
|||||||
this.userService = userService;
|
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 }> {
|
async login(username: string, password: string): Promise<{ token: string; user: User }> {
|
||||||
try {
|
try {
|
||||||
|
// 确保admin用户存在
|
||||||
|
if (username === ADMIN_USERNAME) {
|
||||||
|
await this.ensureAdminExists();
|
||||||
|
}
|
||||||
|
|
||||||
const user = await this.userService.getUserByUsername(username);
|
const user = await this.userService.getUserByUsername(username);
|
||||||
if (!user) {
|
if (!user) {
|
||||||
throw new Error('User not found');
|
throw new Error('User not found');
|
||||||
@@ -27,7 +61,7 @@ export class AuthService {
|
|||||||
const token = this.generateToken(user);
|
const token = this.generateToken(user);
|
||||||
return { token, user };
|
return { token, user };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Login error:', error);
|
logger.error('Login error:', error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user