# Requirements Document ## Introduction 本文档定义了将PHP用户认证系统迁移到.NET 8的需求规范。迁移范围包括微信小程序登录、手机号验证码登录、JWT Token管理、用户信息管理、手机号绑定、登录记录和账号注销功能。迁移过程中需要保持与现有UniApp前端的100%兼容性。 ## Glossary - **Auth_System**: 用户认证系统,负责处理用户登录、注册、Token管理等功能 - **Wechat_Service**: 微信服务,负责与微信API交互获取openid和用户信息 - **Sms_Service**: 短信服务,负责验证短信验证码(发送验证码暂不迁移,继续使用PHP接口) - **Jwt_Service**: JWT服务,负责生成、验证和刷新JWT Token - **User_Service**: 用户服务,负责用户信息的增删改查 - **Redis_Cache**: Redis缓存服务,用于存储验证码和防抖锁 - **IP_Location_Service**: IP地理位置服务,用于解析用户登录IP的地理位置 ## Requirements ### Requirement 1: 微信小程序登录 **User Story:** As a 用户, I want to 通过微信小程序授权登录, so that 我可以快速进入系统而无需输入账号密码 #### Acceptance Criteria 1. WHEN 用户提交微信授权code, THE Auth_System SHALL 调用微信API获取openid和unionid 2. WHEN 获取到openid后, THE Auth_System SHALL 查找是否存在该用户(优先通过unionid查找,其次通过openid查找) 3. WHEN 用户不存在时, THE Auth_System SHALL 自动创建新用户并生成默认头像和昵称 4. WHEN 用户存在时, THE Auth_System SHALL 更新用户的unionid(如果之前为空) 5. WHEN 登录成功后, THE Auth_System SHALL 生成JWT Token并返回给客户端 6. WHEN 用户在3秒内重复请求登录, THE Auth_System SHALL 返回"请勿频繁登录"错误(防抖机制) 7. IF 微信API调用失败, THEN THE Auth_System SHALL 返回明确的错误信息 8. WHEN 用户提供推荐人ID(pid), THE Auth_System SHALL 记录推荐关系 ### Requirement 2: 手机号验证码登录 **User Story:** As a 用户, I want to 通过手机号和验证码登录, so that 我可以在没有微信的情况下也能登录系统 #### Acceptance Criteria 1. WHEN 用户提交手机号和验证码登录, THE Auth_System SHALL 从Redis获取并验证验证码是否正确 2. WHEN 验证码验证通过后, THE Auth_System SHALL 删除Redis中的验证码 3. WHEN 手机号用户不存在时, THE Auth_System SHALL 自动创建新用户并生成默认头像和昵称 4. WHEN 登录成功后, THE Auth_System SHALL 生成JWT Token并返回 5. IF 验证码错误或过期, THEN THE Auth_System SHALL 返回"验证码错误" 6. WHEN 用户在3秒内重复请求登录, THE Auth_System SHALL 返回"请勿频繁登录"错误 7. WHEN 用户提供推荐人ID(pid), THE Auth_System SHALL 记录推荐关系 **注意:** 发送短信验证码接口暂不迁移,继续使用PHP原有接口 ### Requirement 3: JWT Token管理 **User Story:** As a 系统, I want to 使用JWT Token进行用户认证, so that 可以实现无状态的安全认证 #### Acceptance Criteria 1. WHEN 用户登录成功, THE Jwt_Service SHALL 生成包含用户ID的JWT Token 2. THE Jwt_Service SHALL 使用配置的密钥对Token进行签名 3. WHEN 请求携带Token访问受保护接口, THE Auth_System SHALL 验证Token的有效性 4. IF Token无效或过期, THEN THE Auth_System SHALL 返回状态码-1(未登录) 5. WHEN Token即将过期时, THE Jwt_Service SHALL 支持Token刷新功能 6. THE Auth_System SHALL 同时在数据库UserAccount表中存储account_token用于兼容旧系统 ### Requirement 4: 用户信息管理 **User Story:** As a 用户, I want to 查看和修改我的个人信息, so that 我可以维护我的账户资料 #### Acceptance Criteria 1. WHEN 用户请求获取个人信息, THE User_Service SHALL 返回用户的完整信息(包括余额、积分、VIP等级等) 2. WHEN 用户更新昵称, THE User_Service SHALL 验证昵称不为空并保存 3. WHEN 用户上传新头像, THE User_Service SHALL 将Base64图片上传到腾讯云COS并更新头像URL 4. THE User_Service SHALL 对手机号进行脱敏处理(显示为138****8000格式) 5. WHEN 返回用户信息时, THE User_Service SHALL 计算并返回用户的VIP等级和相关权益 ### Requirement 5: 手机号绑定 **User Story:** As a 用户, I want to 绑定我的手机号, so that 我可以使用手机号登录并接收重要通知 #### Acceptance Criteria 1. WHEN 用户请求绑定手机号, THE Auth_System SHALL 验证短信验证码 2. WHEN 手机号已被其他用户绑定, THE Auth_System SHALL 合并两个账户(保留手机号用户,迁移openid) 3. WHEN 账户合并后, THE Auth_System SHALL 返回新的Token 4. WHEN 手机号未被绑定, THE Auth_System SHALL 直接更新当前用户的手机号 5. IF 验证码错误, THEN THE Auth_System SHALL 返回"验证码错误" ### Requirement 6: 登录记录 **User Story:** As a 系统管理员, I want to 记录用户的登录信息, so that 可以进行安全审计和用户行为分析 #### Acceptance Criteria 1. WHEN 用户登录成功, THE Auth_System SHALL 记录登录日志(包括用户ID、设备类型、IP地址、登录时间) 2. WHEN 记录登录时, THE IP_Location_Service SHALL 解析IP地址获取省份和城市信息 3. THE Auth_System SHALL 更新UserAccount表中的最后登录时间和IP信息 4. WHEN 用户调用recordLogin接口, THE Auth_System SHALL 返回用户的uid、昵称和头像 ### Requirement 7: 账号注销 **User Story:** As a 用户, I want to 注销我的账号, so that 我可以删除我在系统中的所有数据 #### Acceptance Criteria 1. WHEN 用户请求注销账号, THE Auth_System SHALL 记录注销请求日志 2. THE Auth_System SHALL 返回注销成功的消息 3. WHEN type参数为0时表示注销账号,type为1时表示取消注销 ### Requirement 8: API接口文档更新 **User Story:** As a 开发者, I want to 在迁移完成后更新API接口文档, so that 可以追踪迁移进度和新接口地址 #### Acceptance Criteria 1. WHEN 每个接口迁移完成后, THE 开发者 SHALL 在docs/API接口文档.md中标记该接口为"已迁移" 2. THE 文档 SHALL 记录新接口的完整地址 3. THE 文档 SHALL 保留原接口信息以便对比