Przeglądaj źródła

📝 docs(story): add mini-program auto-login story documentation

- 创建微信小程序自动登录功能的用户故事文档
- 定义功能需求、验收标准和开发任务
- 记录技术栈信息、项目结构和实现状态
- 添加测试要求和文件列表等开发相关信息
yourname 3 miesięcy temu
rodzic
commit
a292c0d160
1 zmienionych plików z 133 dodań i 0 usunięć
  1. 133 0
      docs/stories/005.013.mini-program-auto-login.story.md

+ 133 - 0
docs/stories/005.013.mini-program-auto-login.story.md

@@ -0,0 +1,133 @@
+# Story 5.13: 微信小程序环境自动登录获取openid
+
+## Status
+In Progress
+
+## Story
+**As a** 微信小程序用户
+**I want** 在微信小程序环境中能够通过微信一键登录并获取我的openid
+**so that** 便捷使用出行服务,无需手动输入账号密码
+
+## Acceptance Criteria
+- [x] 支持微信小程序 `wx.login` 获取code
+- [x] 实现openid获取API接口,接收小程序code
+- [x] 自动创建或关联用户账号
+- [x] 支持用户信息自动同步
+- [ ] 实现静默登录机制,用户无感知(应用启动时自动登录)
+- [x] 支持登录状态持久化
+- [x] 确保登录流程的安全性和可靠性
+- [x] 支持登录失败的重试机制
+
+## Tasks / Subtasks
+- [x] 实现小程序登录API接口 (AC: 2, 3, 4)
+  - [x] 创建小程序登录路由文件 `packages/server/src/api/auth/mini-login/post.ts`
+  - [x] 实现MiniAuthService服务类 `packages/server/src/modules/auth/mini-auth.service.ts`
+  - [x] 支持微信code换取openid和session_key
+  - [x] 自动创建或关联用户账号
+  - [x] 支持用户信息更新和头像下载
+- [x] 实现小程序前端登录组件 (AC: 1, 5, 7, 8)
+  - [x] 创建微信登录页面 `mini/src/pages/login/wechat-login.tsx`
+  - [x] 集成Taro.login和Taro.getUserProfile
+  - [x] 实现登录状态管理和持久化
+  - [x] 支持登录失败重试机制
+  - [x] 添加错误处理和用户友好提示
+- [ ] 实现静默登录机制 (AC: 5)
+  - [ ] 在应用启动时检查登录状态
+  - [ ] 实现静默登录逻辑(无用户感知)
+  - [ ] 处理静默登录失败场景
+  - [ ] 确保静默登录不影响用户体验
+- [ ] 完善登录状态管理 (AC: 6)
+  - [ ] 优化token存储和刷新机制
+  - [ ] 实现登录状态自动续期
+  - [ ] 添加登录状态检查中间件
+- [ ] 编写测试用例 (AC: 7)
+  - [ ] 编写小程序登录API单元测试
+  - [ ] 编写前端登录组件集成测试
+  - [ ] 编写静默登录流程E2E测试
+
+## Dev Notes
+
+### 技术栈信息
+- **前端框架**: Taro + React 小程序框架 [Source: architecture/tech-stack.md#L13]
+- **后端框架**: Hono + TypeORM [Source: architecture/tech-stack.md#L12, L16]
+- **数据库**: PostgreSQL 17 [Source: architecture/tech-stack.md#L15]
+- **认证**: JWT Bearer Token [Source: architecture/tech-stack.md#L19]
+
+### 项目结构
+- **小程序项目**: `mini/` 目录 [Source: architecture/source-tree.md#L11]
+- **API服务器**: `packages/server/` 目录 [Source: architecture/source-tree.md#L62]
+- **登录页面**: `mini/src/pages/login/wechat-login.tsx` [Source: architecture/source-tree.md#L42-L45]
+- **认证API**: `packages/server/src/api/auth/mini-login/post.ts` [Source: architecture/source-tree.md#L72-L80]
+
+### 现有实现状态
+- ✅ 后端小程序登录API已实现
+- ✅ 前端微信登录页面已实现
+- ✅ 用户自动注册和关联逻辑已实现
+- ✅ 头像下载和用户信息更新已实现
+- ❌ 静默登录机制待实现
+- ❌ 登录状态自动续期待完善
+
+### 数据模型
+- **用户实体**: 已包含openid、unionid字段 [Source: packages/server/src/modules/users/user.entity.ts]
+- **用户字段**: `id`, `username`, `openid`, `unionid`, `nickname`, `phone`, `email`, `avatarFileId`, `registrationSource`
+
+### API设计规范
+- **非通用CRUD路由**: 使用业务操作路由模式 [Source: architecture/non-generic-crud-standards.md#L206-L295]
+- **路由文件组织**: 单一文件聚合模式 [Source: architecture/non-generic-crud-standards.md#L426-L464]
+- **错误处理**: 统一错误响应格式 [Source: architecture/non-generic-crud-standards.md#L359-L380]
+
+### 安全要求
+- **微信API调用**: 使用官方jscode2session接口
+- **数据加密**: session_key存储在Redis中
+- **用户隐私**: 严格保护用户openid等敏感信息
+- **权限控制**: 使用JWT token进行认证
+
+### 静默登录实现方案
+**技术方案**:
+- 在应用启动时检查本地存储的token
+- 如果token存在且有效,自动登录
+- 如果token过期,尝试静默刷新
+- 如果静默登录失败,保持未登录状态,不影响用户体验
+
+**实现要点**:
+- 使用Taro.useLaunch钩子
+- 集成到现有的AuthProvider中
+- 添加静默登录状态管理
+- 确保无用户感知的登录体验
+
+## Testing
+
+### 测试要求
+- **API测试**: 验证小程序登录API的正确性
+- **前端测试**: 验证微信登录组件的交互
+- **集成测试**: 验证完整的登录流程
+- **E2E测试**: 验证静默登录和状态持久化
+
+### 测试位置
+- **后端测试**: `packages/server/tests/unit/modules/auth/mini-auth.service.test.ts`
+- **前端测试**: `mini/tests/pages/login/wechat-login.test.tsx`
+- **集成测试**: `mini/tests/integration/auth/mini-login.test.ts`
+- **E2E测试**: `tests/e2e/mini-program-login/mini-login.spec.ts`
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-10-25 | 1.0 | 创建故事文档 | James (Developer) |
+
+## Dev Agent Record
+
+### Agent Model Used
+James (Developer Agent)
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List
+- `packages/server/src/api/auth/mini-login/post.ts` - 小程序登录API路由
+- `packages/server/src/modules/auth/mini-auth.service.ts` - 小程序认证服务
+- `mini/src/pages/login/wechat-login.tsx` - 微信登录页面
+- `mini/src/utils/auth.tsx` - 认证状态管理
+- `mini/src/app.tsx` - 应用入口(需要添加静默登录)
+
+## QA Results