# 二维码登录功能设置指南

## 概述

本指南将帮助您设置和测试二维码登录功能。后端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端和移动端
- ✅ 支持微信小程序登录
