191 lines
5.4 KiB
Markdown
191 lines
5.4 KiB
Markdown
|
|
# 游客模式逻辑错误修复
|
||
|
|
|
||
|
|
## 问题描述
|
||
|
|
|
||
|
|
游客访问服务列表页面时,出现401错误:
|
||
|
|
```
|
||
|
|
{code: 401, message: "不存在", silent: true}
|
||
|
|
```
|
||
|
|
|
||
|
|
即使已经将服务相关接口添加到游客白名单,问题仍然存在。
|
||
|
|
|
||
|
|
## 根本原因
|
||
|
|
|
||
|
|
在 `peidu/uniapp/src/utils/request.js` 中发现**游客模式判断逻辑完全相反**!
|
||
|
|
|
||
|
|
### 错误的逻辑(第119-123行)
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// 游客模式下,如果访问订单接口,直接静默失败
|
||
|
|
if (isGuest && isGuestAllowedUrl(options.url)) {
|
||
|
|
console.log('[Request] 游客模式,访问白名单接口,静默失败:', options.url)
|
||
|
|
reject({ code: 401, message: '未登录', silent: true })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**问题**: 这个逻辑是反的!
|
||
|
|
- 当游客访问**白名单中的接口**时 → 拒绝请求 ❌
|
||
|
|
- 当游客访问**非白名单接口**时 → 允许请求 ❌
|
||
|
|
|
||
|
|
这导致:
|
||
|
|
- ❌ 游客无法访问 `/api/service/list`(在白名单中)
|
||
|
|
- ❌ 游客无法访问 `/api/category/all`(在白名单中)
|
||
|
|
- ❌ 游客无法访问 `/api/service/search`(在白名单中)
|
||
|
|
|
||
|
|
### 正确的逻辑
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// 游客模式下,如果访问的接口不在白名单中,直接静默失败
|
||
|
|
if (isGuest && !isGuestAllowedUrl(options.url)) {
|
||
|
|
console.log('[Request] 游客模式,访问非白名单接口,静默失败:', options.url)
|
||
|
|
reject({ code: 401, message: '未登录', silent: true })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**正确行为**:
|
||
|
|
- 当游客访问**白名单中的接口**时 → 允许请求 ✅
|
||
|
|
- 当游客访问**非白名单接口**时 → 拒绝请求 ✅
|
||
|
|
|
||
|
|
## 修复方案
|
||
|
|
|
||
|
|
### 1. 修复 request.js 中的逻辑错误
|
||
|
|
|
||
|
|
**文件**: `peidu/uniapp/src/utils/request.js`
|
||
|
|
|
||
|
|
**修改位置**: 第119-123行
|
||
|
|
|
||
|
|
**修改内容**:
|
||
|
|
```javascript
|
||
|
|
// 修改前
|
||
|
|
if (isGuest && isGuestAllowedUrl(options.url)) {
|
||
|
|
reject({ code: 401, message: '未登录', silent: true })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// 修改后
|
||
|
|
if (isGuest && !isGuestAllowedUrl(options.url)) { // ✅ 添加了 ! 取反
|
||
|
|
reject({ code: 401, message: '未登录', silent: true })
|
||
|
|
return
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 确认游客白名单配置正确
|
||
|
|
|
||
|
|
**文件**: `peidu/uniapp/src/utils/request.js`
|
||
|
|
|
||
|
|
**白名单配置**:
|
||
|
|
```javascript
|
||
|
|
const GUEST_ALLOWED_URLS = [
|
||
|
|
'/api/notification/unread-count',
|
||
|
|
'/api/timecard/list',
|
||
|
|
'/api/home/courses',
|
||
|
|
'/api/banner/list',
|
||
|
|
'/api/service/list', // ✅ 服务列表
|
||
|
|
'/api/service/search', // ✅ 搜索服务
|
||
|
|
'/api/category/all', // ✅ 服务分类
|
||
|
|
'/api/teacher/list',
|
||
|
|
'/api/course/list',
|
||
|
|
'/api/order/list',
|
||
|
|
'/api/order/list-full'
|
||
|
|
]
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. 删除错误的页面配置
|
||
|
|
|
||
|
|
**文件**: `peidu/uniapp/src/pages.json`
|
||
|
|
|
||
|
|
**删除内容**: activity-package 中的 `pages/promo/detail` 配置(因为文件在主包中)
|
||
|
|
|
||
|
|
## 影响范围
|
||
|
|
|
||
|
|
这个逻辑错误影响了**所有游客模式的功能**:
|
||
|
|
|
||
|
|
### 修复前(错误逻辑)
|
||
|
|
- ❌ 游客无法查看首页课程
|
||
|
|
- ❌ 游客无法查看轮播图
|
||
|
|
- ❌ 游客无法查看服务列表
|
||
|
|
- ❌ 游客无法搜索服务
|
||
|
|
- ❌ 游客无法查看订单列表(即使是空列表)
|
||
|
|
- ❌ 所有白名单接口都被拒绝
|
||
|
|
|
||
|
|
### 修复后(正确逻辑)
|
||
|
|
- ✅ 游客可以查看首页课程
|
||
|
|
- ✅ 游客可以查看轮播图
|
||
|
|
- ✅ 游客可以查看服务列表
|
||
|
|
- ✅ 游客可以搜索服务
|
||
|
|
- ✅ 游客可以查看订单列表(显示空列表)
|
||
|
|
- ✅ 游客可以浏览所有白名单接口
|
||
|
|
- ❌ 游客无法提交订单(需要登录)
|
||
|
|
|
||
|
|
## 测试验证
|
||
|
|
|
||
|
|
### 测试1: 浏览服务列表
|
||
|
|
1. 清除登录状态
|
||
|
|
2. 打开小程序
|
||
|
|
3. 点击"服务"标签
|
||
|
|
4. **预期结果**:
|
||
|
|
- ✅ 正常显示服务分类
|
||
|
|
- ✅ 正常显示服务列表
|
||
|
|
- ✅ 不显示401错误
|
||
|
|
|
||
|
|
### 测试2: 搜索服务
|
||
|
|
1. 以游客身份进入服务页面
|
||
|
|
2. 输入搜索关键词
|
||
|
|
3. **预期结果**:
|
||
|
|
- ✅ 正常显示搜索结果
|
||
|
|
- ✅ 不显示401错误
|
||
|
|
|
||
|
|
### 测试3: 查看首页
|
||
|
|
1. 以游客身份打开小程序
|
||
|
|
2. 查看首页内容
|
||
|
|
3. **预期结果**:
|
||
|
|
- ✅ 正常显示轮播图
|
||
|
|
- ✅ 正常显示课程列表
|
||
|
|
- ✅ 正常显示所有内容
|
||
|
|
|
||
|
|
### 测试4: 提交订单(登录拦截)
|
||
|
|
1. 以游客身份浏览服务
|
||
|
|
2. 点击"立即预约"
|
||
|
|
3. 填写预约信息
|
||
|
|
4. 点击"确认预约"
|
||
|
|
5. **预期结果**:
|
||
|
|
- 🔔 显示"请先登录"提示
|
||
|
|
- 🔄 跳转到登录页面
|
||
|
|
|
||
|
|
## 修改的文件
|
||
|
|
|
||
|
|
1. `peidu/uniapp/src/utils/request.js` - 修复游客模式判断逻辑
|
||
|
|
2. `peidu/uniapp/src/pages.json` - 删除错误的页面配置
|
||
|
|
3. `Archive/[一次性]清除缓存重新编译-服务列表游客模式-2026-02-01.bat` - 更新说明
|
||
|
|
|
||
|
|
## 执行步骤
|
||
|
|
|
||
|
|
1. ✅ 修复 `request.js` 中的逻辑错误
|
||
|
|
2. ✅ 删除 `pages.json` 中错误的页面配置
|
||
|
|
3. ✅ 创建清除缓存的批处理文件
|
||
|
|
4. ⏳ 执行批处理文件清除缓存
|
||
|
|
5. ⏳ 在微信开发者工具中重新编译
|
||
|
|
6. ⏳ 测试游客模式各项功能
|
||
|
|
|
||
|
|
## 经验教训
|
||
|
|
|
||
|
|
1. **逻辑取反要小心** - 一个 `!` 的差别导致整个功能反向工作
|
||
|
|
2. **白名单的含义** - 白名单是"允许访问的列表",不是"拒绝访问的列表"
|
||
|
|
3. **充分测试** - 修改后要测试所有相关功能,不只是单个功能
|
||
|
|
4. **代码审查** - 关键逻辑需要仔细审查,避免低级错误
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
1. **必须清除缓存** - 修改后必须清除所有缓存并重新编译
|
||
|
|
2. **测试覆盖** - 测试所有游客模式功能,确保都正常工作
|
||
|
|
3. **登录拦截** - 确保需要登录的操作仍然被正确拦截
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**修复时间**: 2026-02-01
|
||
|
|
**修复人员**: Kiro AI
|
||
|
|
**问题级别**: 严重(影响所有游客模式功能)
|
||
|
|
**修复状态**: 已完成,待测试
|