Files
mokeeText/memory/session-20260623-2.md
2026-07-15 16:08:17 +08:00

90 lines
4.4 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.
---
name: session-20260623-2
description: 2026-06-23~24 第2次会话 — 审查接入文档 + 编写方案 + 完成代码改造 + 部署到生产服务器
metadata:
type: session
date: 2026-06-23
sessionNumber: 2
startTime: 2026-06-23T16:00:00+08:00
---
# 2026-06-23 第2次会话
## 会话摘要
审查 MoKeeText 接入 Mokee Gateway 统一登录网关的完整文档,发现 8 个问题3 重大 + 5 中等),编写了完整的接入实施方案。
## 关键操作
### 接入文档审查
- **做了什么**: 逐节审查网关接入文档,对比当前 MoKeeText 项目实际情况
- **发现的问题**:
1. 🔴 后端中间件:文档给的是 Flask项目是 FastAPI
2. 🔴 所有 API 缺少用户数据隔离(当前 created_by 硬编码 admin
3. 🔴 前端源码结构分析Vue 3 + Vite + fetch非 axios
4. 🟡 CORS `allow_origins=["*"]``allow_credentials=True` 冲突
5. 🟡 图片存储是否迁移到文件服务(当前存 MySQL LONGBLOB
6. 🟡 本地开发无网关环境如何调试
7. 🟡 现有 admin 数据迁移策略
8. 🟡 前端 API 请求路径变化(直连后端 → 网关)
- **结果**: 用户澄清了关键问题 — 前端源码在当前目录、不修改当前项目结构(作为基线)、现有数据归属 admin、网关有 admin 用户
### 接入方案编写
- **做了什么**: 编写完整 12 个 Task 的接入实施方案,保存到 `docs/superpowers/plans/2026-06-23-mokeetext-gateway-integration.md`
- **方案覆盖**:
- Task 0: 网关数据库初始化(菜单/角色/管理员 SQL
- Task 1-2: 后端 FastAPI 中间件 + CORS 改造
- Task 3: 5 个路由文件用户数据隔离改造
- Task 4-9: 前端 env/axios/路由守卫/UserChip/v-permission
- Task 10: 按钮权限控制
- Task 11-12: 部署更新
- **关键设计决策**:
- 本地开发走 `localhost` 直连后端 + `X-Dev-Mock-User` 头模拟用户
- 生产环境走网关axios 拦截器自动携带 Token + X-System-Code
- 图片读取 API 不鉴权(笔记中 img 标签无法带 Authorization
- 前端保留 fetchdev 模式)+ axios生产模式双通道
- **结果**: 方案已通过 writing-plans 自检spec coverage ✓, placeholder scan ✓, type consistency ✓)
## 重要信息
- 系统编码: `mokeetext-edit`
- 网关地址: `gw.server.zgitm.com`
- 登录地址: `login.user.zgitm.com`
- UserChip CDN: `web.gw.zgitm.com/widgets/user-chip.css|js`
- 文件服务: `file.wg.zgitm.com`(可选,当前项目不用)
- 网关管理员账号: `admin_mokeetext-edit` / `admin123` BCrypt
## 已完成的代码改动
### 后端Task 1-3
-`middleware/__init__.py` + `middleware/user_context.py` — UserContext 辅助类 + FastAPI 中间件
-`app.py` — CORS 更新3 个域名 + localhost + 注册 UserContextMiddleware
-`routes/notes.py` — 所有接口加 created_by 过滤 + request 参数
-`routes/websites.py` — 同上(网站/账号/文件夹)
-`routes/import_api.py` — 同上
-`routes/upload.py` — 上传记录 created_by读取保持公开
-`routes/share.py` — 保持原样(公开访问不走网关)
### 前端Task 4-6
-`.env` / `.env.production` — 环境变量
-`src/utils/request.js` — Axios 实例 + 拦截器
-`src/composables/useApi.js` — 双模式dev (fetch+mock) / production (axios+gateway)
-`src/router.js` — 路由守卫(无 Token → 登录页localhost 豁免)
-`src/directives/permission.js` — v-permission 指令
-`src/main.js` — 注册 permission + 动态加载 UserChip Widget
-`src/App.vue` — UserChip 占位 + 本地 mock 头像
-`index.html` — UserChip CSS
-`src/components/NoteEditor.vue` — 双地址GW_BASE上传+ FILE_BASE读取
-`package.json` — 添加 dev/build scripts安装 axios
- ✅ 构建成功:`static/dist/` 已生成
## 设计决策确认
- X-User-Id = `"admin"` 格式 → 历史数据无需迁移
- 分享页`/share/{token}`走后端直连(公开),`/api/file/{id}`也走后端直连(公开)
- 图片上传走网关(鉴权),读取走后端直连(<img>标签 + 分享页兼容)
- 网关 Authorization 头为空时从 Cookie 取 Token
- 当前项目代码结构保持不变(不重构)
## 待处理
- [ ] Task 0: 网关数据库初始化 SQL需要网关 DB 访问权限)
- [ ] Task 11-12: 生产环境部署(需要 SSH 到服务器)
- [ ] 对接测试清单逐项验证