peixue-dev/Archive/[一次性]游客模式逻辑错误修复-2026-02-01.md

191 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

2026-02-28 17:26:03 +08:00
# 游客模式逻辑错误修复
## 问题描述
游客访问服务列表页面时,出现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
**问题级别**: 严重(影响所有游客模式功能)
**修复状态**: 已完成,待测试