提示词保存

This commit is contained in:
2025-11-13 01:06:28 +08:00
parent fc7d2ccea5
commit c652d0ddf3
49 changed files with 4072 additions and 2452 deletions

View File

@@ -1,160 +0,0 @@
# Token 存储位置说明
## 📍 Token 存储位置总览
Token 在项目中有 **3 个存储位置**,按读取优先级排序:
### 1. **Dev Token开发手动输入的 token**
- **存储位置**`sessionStorage`
- **键名**`DEV_MANUAL_TOKEN`
- **设置方式**`setDevToken(token)`
- **特点**
- 优先级最高(读取时优先使用)
- 关闭浏览器标签页后自动清除
- 用于开发测试
**浏览器查看方式:**
```javascript
// 在浏览器控制台执行
sessionStorage.getItem('DEV_MANUAL_TOKEN')
```
### 2. **正式登录的 Token主要存储**
- **存储位置**`localStorage`(通过 WebStorageCache 封装)
- **键名**
- `ACCESS_TOKEN``access_token`(访问令牌)
- `REFRESH_TOKEN``refresh_token`(刷新令牌)
- **设置方式**`setToken({ accessToken, refreshToken })`
- **特点**
- 持久化存储(关闭浏览器后仍然存在)
- 使用 `WebStorageCache` 库管理
- 支持大小写不同的键名变体(兼容性)
**浏览器查看方式:**
```javascript
// 在浏览器控制台执行
localStorage.getItem('ACCESS_TOKEN')
localStorage.getItem('REFRESH_TOKEN')
// 或者
localStorage.getItem('access_token')
localStorage.getItem('refresh_token')
```
**实际存储结构:**
```
localStorage:
├── ACCESS_TOKEN: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
└── REFRESH_TOKEN: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
```
### 3. **环境变量 Token兜底**
- **存储位置**:代码中(不存储在浏览器)
- **变量名**`VITE_DEV_TOKEN`
- **设置方式**`.env` 文件或环境变量
- **特点**
- 只在代码中读取,不写入浏览器存储
- 优先级最低(前两者都没有时才使用)
- 用于开发环境默认配置
## 🔄 Token 读取优先级
当调用 `getToken()` 时,按以下顺序查找:
```
1. sessionStorage['DEV_MANUAL_TOKEN'] ← 最高优先级
↓ (如果没有)
2. localStorage['ACCESS_TOKEN'] 或 localStorage['access_token']
↓ (如果没有)
3. import.meta.env.VITE_DEV_TOKEN ← 最低优先级
```
## 📝 代码示例
### 设置 Token
```javascript
import { setToken, setDevToken } from '@gold/utils/token-manager'
// 设置正式登录的 token存储到 localStorage
setToken({
accessToken: 'xxx',
refreshToken: 'yyy'
})
// 设置开发 token存储到 sessionStorage
setDevToken('dev-token-123')
```
### 读取 Token
```javascript
import { getToken } from '@gold/utils/token-manager'
// 自动按优先级读取
const token = getToken()
```
### 清除 Token
```javascript
import { clearAllTokens } from '@gold/utils/token-manager'
// 清除所有位置的 token
clearAllTokens()
// 会清除:
// 1. sessionStorage['DEV_MANUAL_TOKEN']
// 2. localStorage['ACCESS_TOKEN'] 和 'access_token'
// 3. localStorage['REFRESH_TOKEN'] 和 'refresh_token'
```
## 🔍 在浏览器中查看
### Chrome DevTools
1. **打开 DevTools** (F12)
2. **Application 标签页**
3. **Storage 部分**
- **Local Storage** → 查看 `ACCESS_TOKEN``REFRESH_TOKEN`
- **Session Storage** → 查看 `DEV_MANUAL_TOKEN`
### 控制台命令
```javascript
// 查看所有 token
console.log('Dev Token:', sessionStorage.getItem('DEV_MANUAL_TOKEN'))
console.log('Access Token:', localStorage.getItem('ACCESS_TOKEN'))
console.log('Refresh Token:', localStorage.getItem('REFRESH_TOKEN'))
// 查看所有 localStorage
console.table(localStorage)
// 查看所有 sessionStorage
console.table(sessionStorage)
```
## ⚠️ 注意事项
1. **WebStorageCache 封装**
- `useCache()` 默认使用 `localStorage`
- 通过 `WebStorageCache` 库管理,支持过期时间等功能
- 实际存储位置仍然是 `localStorage`
2. **键名大小写**
- 代码中统一使用 `ACCESS_TOKEN``REFRESH_TOKEN`(大写)
- 但为了兼容,也支持 `access_token``refresh_token`(小写)
- 读取时会尝试所有变体
3. **清除逻辑**
- `clearAllTokens()` 会清除所有位置的 token
- 包括 sessionStorage、localStorage 的所有变体键名
- 确保完全清除,避免残留
## 📊 存储位置总结表
| Token 类型 | 存储位置 | 键名 | 持久化 | 优先级 |
|-----------|---------|------|--------|--------|
| Dev Token | sessionStorage | `DEV_MANUAL_TOKEN` | ❌ 关闭标签页清除 | 1 (最高) |
| Access Token | localStorage | `ACCESS_TOKEN` / `access_token` | ✅ 持久化 | 2 |
| Refresh Token | localStorage | `REFRESH_TOKEN` / `refresh_token` | ✅ 持久化 | 2 |
| Env Token | 代码中 | `VITE_DEV_TOKEN` | N/A | 3 (最低) |