109 lines
2.2 KiB
Markdown
109 lines
2.2 KiB
Markdown
|
|
# 全局工具模块 (Monorepo Utils)
|
|||
|
|
|
|||
|
|
此目录包含可在 monorepo 各个应用中复用的全局工具函数。
|
|||
|
|
|
|||
|
|
## 📁 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
utils/
|
|||
|
|
├── token-manager.js # Token 统一管理工具
|
|||
|
|
└── README.md # 本文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 使用方式
|
|||
|
|
|
|||
|
|
### Token 管理 (`token-manager.js`)
|
|||
|
|
|
|||
|
|
在应用中使用全局 token 管理工具:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 导入 token 管理工具
|
|||
|
|
import {
|
|||
|
|
getToken,
|
|||
|
|
setToken,
|
|||
|
|
clearAllTokens,
|
|||
|
|
getAuthHeader
|
|||
|
|
} from '@gold/utils/token-manager'
|
|||
|
|
|
|||
|
|
// 获取 token
|
|||
|
|
const token = getToken()
|
|||
|
|
|
|||
|
|
// 设置 token
|
|||
|
|
setToken({
|
|||
|
|
accessToken: 'xxx',
|
|||
|
|
refreshToken: 'yyy'
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 获取 Authorization Header
|
|||
|
|
const header = getAuthHeader() // Bearer xxx
|
|||
|
|
|
|||
|
|
// 清空所有 token
|
|||
|
|
clearAllTokens()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📝 API 说明
|
|||
|
|
|
|||
|
|
### Token 管理函数
|
|||
|
|
|
|||
|
|
#### `getToken()`
|
|||
|
|
获取访问令牌(按优先级读取)
|
|||
|
|
|
|||
|
|
**返回值:** `string` - token 字符串或空字符串
|
|||
|
|
|
|||
|
|
#### `getAccessToken()`
|
|||
|
|
获取访问令牌(别名,兼容旧代码)
|
|||
|
|
|
|||
|
|
**返回值:** `string` - token 字符串或空字符串
|
|||
|
|
|
|||
|
|
#### `getRefreshToken()`
|
|||
|
|
获取刷新令牌
|
|||
|
|
|
|||
|
|
**返回值:** `string | null` - 刷新令牌或 null
|
|||
|
|
|
|||
|
|
#### `setToken(tokens)`
|
|||
|
|
设置访问令牌和刷新令牌
|
|||
|
|
|
|||
|
|
**参数:**
|
|||
|
|
- `tokens.accessToken` (string, 可选): 访问令牌
|
|||
|
|
- `tokens.refreshToken` (string, 可选): 刷新令牌
|
|||
|
|
|
|||
|
|
#### `clearAllTokens()`
|
|||
|
|
清除所有 token(包括 dev token、access token、refresh token)
|
|||
|
|
|
|||
|
|
#### `removeToken()`
|
|||
|
|
删除 token(别名,调用 `clearAllTokens()`)
|
|||
|
|
|
|||
|
|
#### `getAuthHeader()`
|
|||
|
|
获取完整的 Authorization Header 值
|
|||
|
|
|
|||
|
|
**返回值:** `string` - `Bearer token` 或空字符串
|
|||
|
|
|
|||
|
|
#### `setDevToken(token)`
|
|||
|
|
设置手动输入的 dev token(用于开发测试)
|
|||
|
|
|
|||
|
|
**参数:** `token` (string) - dev token
|
|||
|
|
|
|||
|
|
#### `getDevToken()`
|
|||
|
|
获取手动输入的 dev token
|
|||
|
|
|
|||
|
|
**返回值:** `string` - dev token 或空字符串
|
|||
|
|
|
|||
|
|
## 🔄 Token 存储优先级
|
|||
|
|
|
|||
|
|
1. **手动输入的 dev token** (sessionStorage) - 最高优先级
|
|||
|
|
2. **正式登录的 token** (wsCache/localStorage)
|
|||
|
|
3. **环境变量 VITE_DEV_TOKEN** - 兜底
|
|||
|
|
|
|||
|
|
## 📦 在 Vite 配置中使用
|
|||
|
|
|
|||
|
|
确保在 `vite.config.js` 中配置了 `@gold` 别名:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
resolve: {
|
|||
|
|
alias: {
|
|||
|
|
'@gold': fileURLToPath(new URL('../../', import.meta.url))
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|