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

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: 浏览服务列表

  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
问题级别: 严重(影响所有游客模式功能)
修复状态: 已完成,待测试