Files
knowai/auth/README.md
tobegold574 6a81b7bb13
Some checks reported errors
continuous-integration/drone/push Build was killed
feat(image): 新建 knowai-core:1.0.0 镜像并完成推送
- 搭建 api、auth、utils 等逻辑模块
- 通过 tsc、eslint、vitest 测试验证

BREAKING CHANGE: 新镜像分支
2025-11-10 20:20:25 +08:00

217 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 认证模块
## 概述
认证模块提供基于Session的认证机制支持用户登录、注册、登出和会话管理功能。该模块采用适配器模式支持多种存储方式Cookie、LocalStorage、内存以适应不同的运行环境浏览器、SSR等
## 核心组件
### 1. 认证服务 (AuthService)
`AuthService` 接口定义了认证相关的核心功能:
- `login(credentials)`: 用户登录
- `register(userData)`: 用户注册
- `logout()`: 用户登出
- `isAuthenticated()`: 检查是否已认证
- `getCurrentUser()`: 获取当前用户信息
- `refreshSession()`: 刷新会话
- `getSession()`: 获取会话信息
### 2. 会话管理器 (SessionManager)
`SessionManager` 负责管理用户会话状态,包括:
- 会话的创建、验证、刷新和清除
- 用户信息的获取和缓存
- 会话状态的持久化存储
### 3. 存储适配器 (StorageAdapter)
`StorageAdapter` 提供统一的存储接口,支持多种存储方式:
- `CookieStorageAdapter`: 使用Cookie存储适用于SSR环境
- `LocalStorageAdapter`: 使用浏览器LocalStorage存储
- `MemoryStorageAdapter`: 使用内存存储,适用于测试或临时会话
### 4. 事件管理器 (EventManager)
`EventManager` 负责管理认证相关事件:
- 登录事件 (`login`)
- 注册事件 (`register`)
- 登出事件 (`logout`)
- 错误事件 (`error`)
### 5. 类型定义
模块包含完整的TypeScript类型定义确保类型安全。
## 使用方法
### 基本使用
```typescript
import { authService } from '@/auth';
// 用户登录
const loginResult = await authService.login({
username: 'user@example.com',
password: 'password123'
});
if (loginResult.success) {
console.log('登录成功', loginResult.data);
} else {
console.error('登录失败', loginResult.error);
}
// 检查认证状态
if (await authService.isAuthenticated()) {
// 获取当前用户信息
const userResult = await authService.getCurrentUser();
if (userResult.success) {
console.log('当前用户:', userResult.data);
}
}
// 用户登出
await authService.logout();
```
### 测试环境使用
```typescript
import { getAuthService, resetAuthService } from '@/auth';
// 在测试前重置服务实例
resetAuthService();
// 获取新的服务实例
const authService = getAuthService();
```
### 自定义存储方式
```typescript
import { createStorageAdapter } from '@/auth';
// 创建自定义存储适配器
const customStorage = createStorageAdapter('localStorage');
// 注意当前版本使用单例模式自定义存储需要修改auth-service.ts中的实现
```
### 使用自定义存储适配器
```typescript
import { createAuthService, createStorageAdapter } from '@/auth';
// 创建自定义Cookie存储适配器
const cookieStorage = createStorageAdapter('cookie', {
domain: '.example.com',
secure: true,
httpOnly: false,
sameSite: 'strict'
});
// 使用自定义存储适配器
const authService = createAuthService(undefined, cookieStorage);
```
### 事件监听
```typescript
import { createAuthService, createEventManager } from '@/auth';
const eventManager = createEventManager();
const authService = createAuthService();
// 监听登录事件
eventManager.on('login', (data) => {
console.log('用户登录:', data.user);
});
// 监听登出事件
eventManager.on('logout', () => {
console.log('用户已登出');
});
```
## 会话管理
### 会话存储
会话信息通过StorageAdapter存储默认使用Cookie存储以支持SSR环境。会话信息包括
- `sessionId`: 会话ID
- `userId`: 用户ID
- `expiresAt`: 过期时间
- `createdAt`: 创建时间
### 会话验证
SessionManager会自动验证会话的有效性
1. 检查本地是否存在会话ID
2. 验证会话是否过期
3. 向服务器验证会话有效性
4. 自动刷新过期会话
### 会话刷新
当会话即将过期时SessionManager会自动尝试刷新会话
1. 使用当前会话ID请求刷新
2. 更新本地存储的会话信息
3. 清除缓存的用户信息,下次获取时重新请求
## API端点
认证模块需要以下API端点
- `POST /auth/login`: 用户登录
- `POST /auth/register`: 用户注册
- `POST /auth/logout`: 用户登出
- `GET /auth/session/:sessionId`: 获取会话信息
- `POST /auth/session/refresh`: 刷新会话
- `GET /auth/user/:userId`: 获取用户信息
## 设计模式
认证模块采用以下设计模式:
1. **适配器模式**: 通过StorageAdapter接口支持多种存储方式
2. **工厂模式**: 提供createAuthService等工厂函数简化实例创建
3. **观察者模式**: 通过EventManager实现事件发布订阅
4. **策略模式**: 不同存储方式采用不同策略
## 安全考虑
1. **会话安全**: 使用HttpOnly Cookie存储会话ID防止XSS攻击
2. **CSRF防护**: 通过SameSite Cookie属性防止CSRF攻击
3. **会话过期**: 设置合理的会话过期时间,并支持自动刷新
4. **HTTPS**: 在生产环境中使用HTTPS传输敏感数据
## SSR支持
认证模块完全支持SSR环境
1. 默认使用Cookie存储可在服务器端读取
2. 提供统一的StorageAdapter接口可针对不同环境实现
3. 会话状态可在服务器和客户端之间同步
## 测试
认证模块包含完整的单元测试,覆盖:
- 会话管理功能
- 存储适配器功能
- 认证服务功能
- 错误处理
运行测试:
```bash
npm test auth
```