Files
webs/power_leasing/✅ Token存储降级方案修复说明.md
2026-01-09 17:13:29 +08:00

2.9 KiB
Raw Blame History

Token 存储降级方案 - 修复说明

📌 问题描述

现象: 本地调试正常,但在其他电脑上登录后 localStorage.leasToken 没有存储成功。

根本原因: 项目使用了 AES-GCM 加密存储,依赖 Web Crypto API在 HTTP 环境或旧版浏览器中不可用。

修复方案

实现了三层降级存储策略,确保在任何环境下都能正常存储 token:

优先: AES-GCM 加密存储 (HTTPS + 现代浏览器)
  ↓ 失败自动降级
降级: 明文 JSON 存储 (HTTP 环境/旧浏览器)
  ↓ 失败保底
保底: 内存缓存 (至少当前会话可用)

🔧 修改的文件

核心修复:

  • src/utils/request.js - Token 管理逻辑
    • initTokenCache() - 智能读取(加密→明文→内存)
    • updateToken() - 智能存储(加密→明文→内存)
    • clearToken() - 完全清除(加密+明文+内存)

📊 兼容性

环境 存储方式 状态
HTTPS + 现代浏览器 AES-GCM 加密 最安全
HTTP 环境 ⚠️ 明文 JSON 自动降级
旧版浏览器 (IE11/360兼容模式) ⚠️ 明文 JSON 自动降级
隐私模式 💾 内存缓存 会话内可用

🧪 验证方法

开发环境测试

npm run serve

登录后在浏览器控制台检查:

// 检查是否存储成功
console.log('Token 已存储:', !!localStorage.getItem('leasToken'));

// 查看存储模式(开发环境会有日志)
// HTTPS: [Token缓存] ✅ 已保存到加密存储
// HTTP:  [Token缓存] ✅ 已保存到明文存储(降级模式)

测试登录持久化

// 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 影响范围: 所有用户的登录和会话管理 紧急程度: 建议尽快部署测试