ソースを参照

登录功能修改

Zhangbw 3 ヶ月 前
コミット
cd8f43c4d5

+ 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. 用户信息弹窗不允许点击遮罩关闭

+ 1 - 1
src/main/java/com/yingpai/gupiao/controller/AuthController.java

@@ -50,7 +50,7 @@ public class AuthController {
      * 第二步:手机号授权验证(新用户)
      * 接口路径:POST /v1/auth/wx/phone-verify
      * 
-     * @param dto 包含 loginCode, phoneCode, encryptedData, iv
+     * @param dto 包含 loginCode, encryptedData, iv
      * @return 已注册返回 { isSign: "true", token },未注册返回 { isSign: "false", openid, unionid, phoneNumber }
      */
     @PostMapping("/phone-verify")

+ 0 - 5
src/main/java/com/yingpai/gupiao/domain/dto/WxPhoneLoginDTO.java

@@ -13,11 +13,6 @@ public class WxPhoneLoginDTO {
      */
     private String loginCode;
     
-    /**
-     * 手机号授权code(新版方式,暂不使用)
-     */
-    private String phoneCode;
-    
     /**
      * 加密数据(旧版方式,当前使用)
      */

+ 1 - 6
src/main/java/com/yingpai/gupiao/service/impl/AuthServiceImpl.java

@@ -34,11 +34,6 @@ public class AuthServiceImpl implements AuthService {
     private final JwtUtil jwtUtil;
     private final WxApiUtil wxApiUtil;
     
-    /**
-     * 默认头像URL
-     */
-    private static final String DEFAULT_AVATAR = "/static/images/head.png";
-    
     /**
      * 第一步:微信静默登录(检查是否为老用户)
      * @param loginCode 微信登录code
@@ -215,7 +210,7 @@ public class AuthServiceImpl implements AuthService {
             newUser.setUnionid(dto.getUnionid());
             newUser.setPhone(dto.getPhoneNumber());
             newUser.setNickname(dto.getNickname());
-            newUser.setAvatar(dto.getAvatarUrl() != null ? dto.getAvatarUrl() : DEFAULT_AVATAR);
+            newUser.setAvatar(dto.getAvatarUrl());
             newUser.setStatus(0);
             newUser.setCreateTime(LocalDateTime.now());
             newUser.setUpdateTime(LocalDateTime.now());

+ 0 - 29
src/main/resources/application.properties

@@ -1,29 +0,0 @@
-#??
-wx.appid=wxcf9eec0da6a6b696
-wx.secret=2808024de706bfb74d0fe1a111dfa00d
-
-spring.application.name=gupiao
-
-
-# application.properties
-spring.datasource.url=jdbc:mysql://localhost:3306/gupiao?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
-spring.datasource.username=root
-spring.datasource.password=121380
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-
-# MyBatis-Plus
-mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
-
-#????????
-file.upload.path=D:/program/gupiao/uploads
-
-file.access.url=http://localhost:8080
-# Spring Boot
-spring.servlet.multipart.max-file-size=10MB
-spring.servlet.multipart.max-request-size=10MB
-
-logging.level.root=info
-logging.level.com.yingpai.gupiao=debug
-logging.level.com.baomidou.mybatisplus=debug
-logging.level.org.springframework.jdbc.datasource.DataSourceTransactionManager=debug
-logging.level.org.springframework.jdbc.core.JdbcTemplate=debug

+ 43 - 0
src/main/resources/application.yml

@@ -0,0 +1,43 @@
+server:
+  port: 8081
+
+# 微信配置
+wx:
+  appid: wxcf9eec0da6a6b696
+  secret: 2808024de706bfb74d0fe1a111dfa00d
+
+spring:
+  application:
+    name: gupiao
+  
+  datasource:
+    url: jdbc:mysql://localhost:3306/ry_vue_5.x?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
+    username: root
+    password: 121380
+    driver-class-name: com.mysql.cj.jdbc.Driver
+  
+  servlet:
+    multipart:
+      max-file-size: 10MB
+      max-request-size: 10MB
+
+# MyBatis-Plus配置
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+# 文件上传配置
+file:
+  upload:
+    path: D:/program/gupiao/uploads
+  access:
+    url: http://localhost:8081
+
+# 日志配置
+logging:
+  level:
+    root: info
+    com.yingpai.gupiao: debug
+    com.baomidou.mybatisplus: debug
+    org.springframework.jdbc.datasource.DataSourceTransactionManager: debug
+    org.springframework.jdbc.core.JdbcTemplate: debug

BIN
uploads/2025/12/24/d65ed8c3-6390-4cfd-8104-9cb721e5a5a2.jpeg