txw/txw-mhzc-web/docs/auth-token-sync.md
liulong ec74735f94 feat: 后端模式开关 & 页脚UI重构 & 登录认证链路改造
【变更概要】
1. 后端模式开关: 新增 backend-mode.js / USE_NEW_BACKEND 控制走老/新后端
2. token 同步链路: 新增 auth-token-store.js, 改造 request.js 拦截器支持 Bearer token
3. auth 重构 API: 新增 auth-refactor.js (独立模块, 不修改老 login.js)
4. user store: Login action 根据 USE_NEW_BACKEND 切换登录接口
5. login 页: 登录后跳转首页, 错误提示优化
6. dev-server proxy: vue.config.js 动态路由, 支持后端模式切换
7. 页脚 UI 重构: 品牌列 + 4 标题列布局, 响应式适配
8. main.vue 弹窗美化, home2 footer 反向缩放, page-layout CSS 变量调整
9. 双开调试配置: .env.development.new

【生产安全注意点 - 请务必确认】
- 生产构建 CI/CD 不得设置 VUE_APP_USE_NEW_BACKEND=true, 否则 Login 将走新后端
  (默认未定义 = false, 走老后端 ry-cloud)
- request.js 的 Authorization 头注入仅在 localStorage 有 txw_access_token 时生效,
  老用户无此 key, 不会加头, 不影响老后端请求
- 响应拦截器的 token 同步逻辑仅处理含 accessToken 字段的响应体,
  老后端不返回该字段, 不会触发
- vue.config.js 仅作用于 dev-server, 生产 Nginx 配置不受影响
2026-06-08 18:00:21 +08:00

49 lines
2.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.

# 门户前端 token 同步方案(阶段 1 收尾 BUG-C
> 范围:`txw-mhzc-web` 门户前端与 `txw-cloud` 网关的鉴权头协商。
> 基线本地三后端在跑auth 9200 / system 9201 / gateway 8080UUID + JWT 双 Token 模式可工作。
> 日期2026-06-07
## 1. 问题
- `txw-auth``AuthController.loginByPassword` 把 token 写入 `Cookie: token``HttpOnly; Secure`)。
- 网关 `AuthFilter` 只读 `Authorization: Bearer <token>` Header**不读 Cookie**。
- 后果:门户前端若只依赖 Cookie 携带 token业务接口经网关会 401。
## 2. 决策
不改后端(影响网关所有受保护接口),由门户前端在 axios 拦截器把 **响应体中的 token** 同步到 `Authorization` Header。
## 3. 实现要点
| 点 | 说明 |
|----|------|
| token 来源 | 登录/刷新响应体 `data.accessToken`(不是 CookieCookie 是 HttpOnlyJS 读不到) |
| token 持久化 | `localStorage`(多 tab 共享、刷新不丢) |
| 请求拦截器 | 自动在 `headers.Authorization` 写入 `Bearer <accessToken>` |
| 响应拦截器 | 登录/刷新成功后 `setTokensFromResponse(data)`401 失败时 `clearTokens()` |
| 登出 | 不需要前端手动清 Header后端 expire Cookie 即可,本地 token 由 `clearTokens` 清) |
| 关键文件 | `src/utils/auth-token-store.js`(存取)、`src/core/request.js`(拦截器) |
## 4. 为什么不用 Cookie 读
`HttpOnly` Cookie 是浏览器安全机制JS 读取会得到空串。若团队坚持用 Cookie需要
1. 去掉 `HttpOnly`(安全降级),或
2. 改后端让网关优先读 Cookie影响所有受保护接口
都不采纳。详情见 `refactor-docs/重构方案/阶段1-收尾-问题清单.md` 第 4 节备选。
## 5. 联调验收
- [ ] 门户登录成功后 `localStorage``txw_access_token`
- [ ] `Authorization: Bearer ...` 出现在 devtools Network 请求头
- [ ]`/mhzc/sy/ptgg/list` 等需鉴权接口返回 200
- [ ] 登出后 `localStorage``txw_access_token` 被清
- [ ] 401 时自动清 token 并触发 `showLoginGuide`
## 6. 不要做的事
- 不要在前端代码里直接 `document.cookie` 读 tokenHttpOnly 读不到)
- 不要把 token 存到 `sessionStorage`(刷新即丢)
- 不要在 `vuex` 全局状态里存(多 tab 不共享)