# 二维码登录功能设置指南 ## 概述 本指南将帮助您设置和测试二维码登录功能。后端Java代码已经完成,前端Vue代码已经适配完成。 ## 🎯 功能状态 - ✅ **后端实现**: Java Spring Boot (已完成) - ✅ **前端适配**: Vue 3 + TypeScript (已完成) - ✅ **接口对接**: API接口已适配 - ✅ **测试页面**: 提供完整的测试工具 ## 🚀 快速开始 ### 1. 启动后端服务 确保您的Java后端服务正在运行,并且包含以下文件: ``` java/auto/ ├── controller/QrLoginController.java ├── service/QrLoginService.java ├── service/impl/QrLoginServiceImpl.java └── dto/ ├── QrLoginGenerateResponse.java ├── QrLoginStatusResponse.java ├── QrLoginConfirmRequest.java └── QrLoginData.java ``` ### 2. 启动前端服务 ```bash npm run dev # 或 yarn dev ``` ### 3. 测试接口连通性 访问接口测试页面: ``` http://localhost:3000/qr-test ``` 按照以下步骤测试: 1. **生成二维码** - 点击"生成二维码"按钮 2. **检查状态** - 开启"自动检查"开关 3. **模拟扫码** - 点击"模拟扫码"按钮 4. **确认登录** - 输入用户ID,点击"确认登录" ## 📱 使用流程 ### Web端操作 1. **进入登录页面** ``` http://localhost:3000/login ``` 2. **切换到扫码登录** - 点击右上角的二维码图标 - 系统自动生成二维码 3. **等待扫码** - 二维码有效期5分钟 - 系统每2秒检查一次状态 ### 移动端操作 1. **扫描二维码** - 使用手机扫描Web端的二维码 - 或直接访问二维码中的URL 2. **确认登录** ``` http://localhost:3000/qr-confirm?qrCodeKey=abc123def456 ``` - 显示用户信息和设备信息 - 点击"确认登录"完成登录 ## 🔧 配置说明 ### 后端配置 在 `application.yml` 中配置JWT相关参数: ```yaml config: jwt: secret: websoft-jwt-secret-key-2025 expire: 86400 # 24小时 ``` ### 前端配置 在 `src/config/setting.ts` 中确认API地址: ```typescript export const SERVER_API_URL = 'http://localhost:8080'; ``` ## 🧪 测试场景 ### 1. 正常登录流程 1. Web端生成二维码 2. 移动端扫码 3. 移动端确认登录 4. Web端自动登录成功 ### 2. 过期场景 1. 生成二维码后等待5分钟 2. 二维码自动过期 3. 点击刷新重新生成 ### 3. 取消场景 1. 移动端扫码后点击取消 2. Web端继续等待新的扫码 ## 🔍 调试方法 ### 1. 查看网络请求 打开浏览器开发者工具 → Network面板: - `POST /api/qr-login/generate` - 生成二维码 - `GET /api/qr-login/status/{token}` - 检查状态 - `POST /api/qr-login/scan/{token}` - 扫码标记 - `POST /api/qr-login/confirm` - 确认登录 ### 2. 查看控制台日志 前端会输出详细的调试信息: ```javascript // 开启调试模式 localStorage.setItem('debug', 'qr-login'); ``` ### 3. 后端日志 查看后端控制台输出: ``` 生成扫码登录token: abc123def456 用户 admin 确认扫码登录,token: abc123def456 扫码登录token abc123def456 状态更新为已扫码 ``` ## 🛠️ 常见问题 ### 1. 二维码生成失败 **可能原因:** - 后端服务未启动 - Redis服务未启动 - 网络连接问题 **解决方法:** - 检查后端服务状态 - 确认Redis连接正常 - 查看控制台错误信息 ### 2. 扫码后无响应 **可能原因:** - 二维码已过期 - 用户未登录 - 网络请求失败 **解决方法:** - 刷新二维码 - 确认用户登录状态 - 检查网络连接 ### 3. 确认登录失败 **可能原因:** - 用户ID不存在 - 用户状态异常 - JWT配置错误 **解决方法:** - 检查用户数据 - 确认用户状态正常 - 验证JWT配置 ## 📋 API接口清单 | 接口 | 方法 | 路径 | 说明 | |------|------|------|------| | 生成二维码 | POST | `/api/qr-login/generate` | 生成登录二维码 | | 检查状态 | GET | `/api/qr-login/status/{token}` | 检查二维码状态 | | 扫码标记 | POST | `/api/qr-login/scan/{token}` | 标记已扫码 | | 确认登录 | POST | `/api/qr-login/confirm` | 确认登录 | | 微信确认 | POST | `/api/qr-login/wechat-confirm` | 微信小程序确认 | ## 🔐 安全特性 1. **时效控制**: 二维码5分钟自动过期 2. **一次性使用**: 每个二维码只能使用一次 3. **状态验证**: 严格的状态流转控制 4. **JWT安全**: 使用JWT进行身份验证 5. **Redis存储**: 使用Redis存储临时数据 ## 📈 性能优化 1. **轮询间隔**: 前端每2秒检查一次状态 2. **缓存策略**: Redis自动过期清理 3. **并发控制**: 支持多用户同时使用 4. **资源清理**: 及时清理过期数据 ## 🎨 自定义配置 ### 修改过期时间 在后端常量中修改: ```java // 默认5分钟 = 300秒 private static final Long QR_LOGIN_TOKEN_TTL = 300L; ``` ### 修改检查间隔 在前端组件中修改: ```typescript // 默认2秒检查一次 }, 2000); ``` ### 修改二维码样式 在前端组件中修改: ```vue ``` ## 📞 技术支持 如果遇到问题,请: 1. 查看控制台错误信息 2. 检查网络请求状态 3. 确认后端服务正常 4. 查看本文档的常见问题部分 ## 🔄 更新日志 ### v1.0.0 (当前版本) - ✅ 完成后端Java实现 - ✅ 完成前端Vue适配 - ✅ 提供完整测试工具 - ✅ 支持Web端和移动端 - ✅ 支持微信小程序登录