5.4 KiB
5.4 KiB
游客模式逻辑错误修复
问题描述
游客访问服务列表页面时,出现401错误:
{code: 401, message: "不存在", silent: true}
即使已经将服务相关接口添加到游客白名单,问题仍然存在。
根本原因
在 peidu/uniapp/src/utils/request.js 中发现游客模式判断逻辑完全相反!
错误的逻辑(第119-123行)
// 游客模式下,如果访问订单接口,直接静默失败
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(在白名单中)
正确的逻辑
// 游客模式下,如果访问的接口不在白名单中,直接静默失败
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行
修改内容:
// 修改前
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
白名单配置:
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: 浏览服务列表
- 清除登录状态
- 打开小程序
- 点击"服务"标签
- 预期结果:
- ✅ 正常显示服务分类
- ✅ 正常显示服务列表
- ✅ 不显示401错误
测试2: 搜索服务
- 以游客身份进入服务页面
- 输入搜索关键词
- 预期结果:
- ✅ 正常显示搜索结果
- ✅ 不显示401错误
测试3: 查看首页
- 以游客身份打开小程序
- 查看首页内容
- 预期结果:
- ✅ 正常显示轮播图
- ✅ 正常显示课程列表
- ✅ 正常显示所有内容
测试4: 提交订单(登录拦截)
- 以游客身份浏览服务
- 点击"立即预约"
- 填写预约信息
- 点击"确认预约"
- 预期结果:
- 🔔 显示"请先登录"提示
- 🔄 跳转到登录页面
修改的文件
peidu/uniapp/src/utils/request.js- 修复游客模式判断逻辑peidu/uniapp/src/pages.json- 删除错误的页面配置Archive/[一次性]清除缓存重新编译-服务列表游客模式-2026-02-01.bat- 更新说明
执行步骤
- ✅ 修复
request.js中的逻辑错误 - ✅ 删除
pages.json中错误的页面配置 - ✅ 创建清除缓存的批处理文件
- ⏳ 执行批处理文件清除缓存
- ⏳ 在微信开发者工具中重新编译
- ⏳ 测试游客模式各项功能
经验教训
- 逻辑取反要小心 - 一个
!的差别导致整个功能反向工作 - 白名单的含义 - 白名单是"允许访问的列表",不是"拒绝访问的列表"
- 充分测试 - 修改后要测试所有相关功能,不只是单个功能
- 代码审查 - 关键逻辑需要仔细审查,避免低级错误
注意事项
- 必须清除缓存 - 修改后必须清除所有缓存并重新编译
- 测试覆盖 - 测试所有游客模式功能,确保都正常工作
- 登录拦截 - 确保需要登录的操作仍然被正确拦截
修复时间: 2026-02-01
修复人员: Kiro AI
问题级别: 严重(影响所有游客模式功能)
修复状态: 已完成,待测试