feat(auth): 添加二维码登录功能- 实现了二维码登录的前端组件和API接口

- 添加了二维码登录的后端逻辑和数据库设计
- 编写了详细的使用说明和接口文档
- 提供了演示页面和测试工具
This commit is contained in:
2025-09-08 14:57:57 +08:00
parent 7b6fac7c41
commit a67162ee06
12 changed files with 2350 additions and 2 deletions

View File

@@ -0,0 +1,262 @@
# 二维码登录功能设置指南
## 概述
本指南将帮助您设置和测试二维码登录功能。后端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
<ele-qr-code-svg :value="qrCodeData" :size="200" />
```
## 📞 技术支持
如果遇到问题,请:
1. 查看控制台错误信息
2. 检查网络请求状态
3. 确认后端服务正常
4. 查看本文档的常见问题部分
## 🔄 更新日志
### v1.0.0 (当前版本)
- ✅ 完成后端Java实现
- ✅ 完成前端Vue适配
- ✅ 提供完整测试工具
- ✅ 支持Web端和移动端
- ✅ 支持微信小程序登录