Files
mp-vue/docs/qr-login-setup-guide.md
赵忠林 a67162ee06 feat(auth): 添加二维码登录功能- 实现了二维码登录的前端组件和API接口
- 添加了二维码登录的后端逻辑和数据库设计
- 编写了详细的使用说明和接口文档
- 提供了演示页面和测试工具
2025-09-08 14:57:57 +08:00

263 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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