105 lines
2.9 KiB
Markdown
105 lines
2.9 KiB
Markdown
# ✅ Token 存储降级方案 - 修复说明
|
||
|
||
## 📌 问题描述
|
||
|
||
**现象:** 本地调试正常,但在其他电脑上登录后 `localStorage.leasToken` 没有存储成功。
|
||
|
||
**根本原因:** 项目使用了 AES-GCM 加密存储,依赖 Web Crypto API,在 HTTP 环境或旧版浏览器中不可用。
|
||
|
||
## ✅ 修复方案
|
||
|
||
实现了**三层降级存储策略**,确保在任何环境下都能正常存储 token:
|
||
|
||
```
|
||
优先: AES-GCM 加密存储 (HTTPS + 现代浏览器)
|
||
↓ 失败自动降级
|
||
降级: 明文 JSON 存储 (HTTP 环境/旧浏览器)
|
||
↓ 失败保底
|
||
保底: 内存缓存 (至少当前会话可用)
|
||
```
|
||
|
||
## 🔧 修改的文件
|
||
|
||
**核心修复:**
|
||
- [src/utils/request.js](src/utils/request.js) - Token 管理逻辑
|
||
- `initTokenCache()` - 智能读取(加密→明文→内存)
|
||
- `updateToken()` - 智能存储(加密→明文→内存)
|
||
- `clearToken()` - 完全清除(加密+明文+内存)
|
||
|
||
## 📊 兼容性
|
||
|
||
| 环境 | 存储方式 | 状态 |
|
||
|------|----------|------|
|
||
| HTTPS + 现代浏览器 | ✅ AES-GCM 加密 | 最安全 |
|
||
| HTTP 环境 | ⚠️ 明文 JSON | 自动降级 |
|
||
| 旧版浏览器 (IE11/360兼容模式) | ⚠️ 明文 JSON | 自动降级 |
|
||
| 隐私模式 | 💾 内存缓存 | 会话内可用 |
|
||
|
||
## 🧪 验证方法
|
||
|
||
### 开发环境测试
|
||
|
||
```bash
|
||
npm run serve
|
||
```
|
||
|
||
登录后在浏览器控制台检查:
|
||
|
||
```javascript
|
||
// 检查是否存储成功
|
||
console.log('Token 已存储:', !!localStorage.getItem('leasToken'));
|
||
|
||
// 查看存储模式(开发环境会有日志)
|
||
// HTTPS: [Token缓存] ✅ 已保存到加密存储
|
||
// HTTP: [Token缓存] ✅ 已保存到明文存储(降级模式)
|
||
```
|
||
|
||
### 测试登录持久化
|
||
|
||
```javascript
|
||
// 1. 登录后刷新页面
|
||
location.reload();
|
||
|
||
// 2. 应该保持登录状态,不需要重新登录
|
||
```
|
||
|
||
### 在问题电脑上验证
|
||
|
||
1. 清除旧数据: `localStorage.clear()`
|
||
2. 重新登录
|
||
3. 检查 localStorage: `console.log('Token:', !!localStorage.getItem('leasToken'))`
|
||
4. 刷新页面验证登录状态保持
|
||
|
||
## 🔍 控制台日志说明
|
||
|
||
### HTTPS 环境(加密存储)
|
||
```
|
||
[Token缓存] ✅ 已保存到加密存储
|
||
[Token缓存] ✅ 从加密存储加载成功
|
||
```
|
||
|
||
### HTTP 环境(自动降级)
|
||
```
|
||
[Token缓存] ⚠️ 加密存储失败,降级为明文存储
|
||
[Token缓存] ✅ 已保存到明文存储(降级模式)
|
||
[Token缓存] ✅ 从明文存储加载成功(降级模式)
|
||
```
|
||
|
||
## 🔒 安全说明
|
||
|
||
- **HTTPS 环境**: 自动使用 AES-GCM 加密,安全性高 ✅
|
||
- **HTTP 环境**: 降级为明文存储,建议尽快升级到 HTTPS ⚠️
|
||
- **生产环境**: 强烈推荐使用 HTTPS 部署
|
||
|
||
## ✅ 向后兼容
|
||
|
||
- ✅ 完全向后兼容,无需数据迁移
|
||
- ✅ 自动识别旧的明文 token
|
||
- ✅ 支持自动升级到加密存储(如果环境支持)
|
||
|
||
---
|
||
|
||
**修复时间:** 2026-01-08
|
||
**影响范围:** 所有用户的登录和会话管理
|
||
**紧急程度:** 建议尽快部署测试
|