章博文 пре 3 месеци
родитељ
комит
9abbb4eec3
1 измењених фајлова са 0 додато и 122 уклоњено
  1. 0 122
      LOGIN_FLOW.md

+ 0 - 122
LOGIN_FLOW.md

@@ -1,122 +0,0 @@
-# 微信小程序登录流程说明
-
-## 概述
-
-本系统采用**三步渐进式登录流程**,使用**旧版手机号解密方式**(不需要开通"手机号快速验证组件"权限)。
-
-## 登录流程
-
-### 第一步:微信静默登录(老用户)
-
-**目的**:检查用户是否已注册,老用户可直接登录
-
-**流程**:
-1. 前端调用 `wx.login()` 获取 `code`
-2. 发送到后端:`POST /v1/auth/wx/silent-login`
-3. 后端用 `code` 调用微信API获取 `openid`
-4. 根据 `openid` 查询数据库
-5. 返回结果:
-   - 老用户:`{ isSign: "true", token }`
-   - 新用户:`{ isSign: "false" }`
-
-### 第二步:手机号授权(新用户)
-
-**目的**:获取用户手机号,检查是否已用手机号注册
-
-**流程**:
-1. 用户点击授权按钮(`open-type="getPhoneNumber"`)
-2. 微信弹窗授权,获取 `encryptedData` 和 `iv`
-3. 重新调用 `wx.login()` 获取新的 `code`
-4. 发送到后端:`POST /v1/auth/wx/phone-verify`
-   ```json
-   {
-     "loginCode": "新的code",
-     "encryptedData": "加密的手机号数据",
-     "iv": "加密算法初始向量"
-   }
-   ```
-5. 后端用 `code` 获取 `session_key`
-6. 后端用 `session_key` 解密 `encryptedData` 得到手机号
-7. 根据手机号查询数据库
-8. 返回结果:
-   - 已注册:`{ isSign: "true", token }`
-   - 未注册:`{ isSign: "false", openid, unionid, phoneNumber }`
-
-### 第三步:完善用户信息(首次登录)
-
-**目的**:收集用户昵称和头像,创建新用户
-
-**流程**:
-1. 弹出用户信息弹窗
-2. 用户输入昵称、选择头像
-3. 上传头像到服务器
-4. 发送到后端:`POST /v1/auth/wx/register`
-   ```json
-   {
-     "openid": "用户openid",
-     "unionid": "用户unionid",
-     "phoneNumber": "手机号",
-     "nickname": "昵称",
-     "avatarUrl": "头像URL"
-   }
-   ```
-5. 后端创建新用户记录
-6. 返回:`{ token }`
-
-## 技术要点
-
-### 1. 手机号解密(AES-128-CBC)
-
-```java
-// 使用 session_key 作为密钥
-// 使用 iv 作为初始向量
-// 使用 AES/CBC/PKCS5Padding 算法解密
-byte[] decryptedBytes = cipher.doFinal(encryptedDataBytes);
-String decryptedData = new String(decryptedBytes, "UTF-8");
-// 解析JSON获取 purePhoneNumber
-```
-
-### 2. 为什么需要两次 wx.login()?
-
-- 第一次:获取 `openid` 检查是否为老用户
-- 第二次:获取新的 `session_key` 用于解密手机号
-- 原因:微信的 `code` 是一次性的,用过就失效
-
-### 3. Token 机制
-
-- 使用 JWT 生成 token
-- 包含 `userId` 和 `phone`
-- 有效期 7 天
-- 前端存储在 `localStorage`
-- 后续请求通过 `Authorization: Bearer {token}` 携带
-
-## 接口列表
-
-| 接口 | 方法 | 说明 |
-|------|------|------|
-| `/v1/auth/wx/silent-login` | POST | 第一步:静默登录 |
-| `/v1/auth/wx/phone-verify` | POST | 第二步:手机号验证 |
-| `/v1/auth/wx/register` | POST | 第三步:完善信息 |
-| `/v1/user/info` | GET | 获取用户信息 |
-| `/v1/file/upload` | POST | 上传头像 |
-| `/v1/stock/search` | POST | 股票搜索 |
-| `/v1/stock/suggestion` | GET | 搜索建议 |
-| `/v1/user/profile` | PUT | 更新用户资料 |
-| `/v1/user/portfolio` | GET | 获取用户资产(待实现) |
-| `/v1/rank/leaderboard` | GET | 排行榜(待实现) |
-
-## 优势
-
-1. **老用户体验好**:无需重复授权,静默登录
-2. **新用户流程简单**:一键授权手机号
-3. **安全性高**:手机号加密传输,前端无法获取明文
-4. **无需付费权限**:使用旧版解密方式,不需要开通"手机号快速验证组件"
-5. **个人小程序可用**:不受企业认证限制
-
-## 注意事项
-
-1. `encryptedData` 和 `iv` 必须同时存在
-2. `session_key` 有效期为用户会话期间
-3. 手机号解密后格式为:`13800138000`(纯数字,无国家码)
-4. 头像上传需要先获取 token
-5. 用户信息弹窗不允许点击遮罩关闭