peixue-dev/Archive/[一次性]游客模式最终修复方案-2026-02-01.md

4.4 KiB
Raw Permalink Blame History

游客模式最终修复方案

修复思路

核心原则: 游客模式下不带token访问服务接口,让后端决定是否允许匿名访问。

修改内容

1. request.js - 请求拦截器

修改1: 移除游客模式的提前拦截

之前: 游客访问非白名单接口时,前端直接拦截 现在: 允许游客访问所有接口,由后端决定是否允许

修改2: 游客模式不带token

之前: 游客访问白名单接口时也不带token 现在: 游客模式下所有请求都不带token

修改3: 401错误静默处理

之前: 游客访问白名单接口返回401时返回空数据 现在: 游客访问白名单接口返回401时静默失败(不弹窗)

2. service/list.vue - 服务列表页面

修改: 错误处理优化

添加: 检查 error.silent 标志,如果是静默失败则不显示错误提示

工作流程

游客模式访问服务列表

游客打开服务列表
  ↓
前端发送请求(不带token)
  ↓
后端判断:
  ├─ 支持匿名访问 → 返回真实数据 ✅
  └─ 不支持匿名访问 → 返回401 ❌
       ↓
     前端静默失败(不弹窗)
       ↓
     页面显示为空

游客模式预约服务

游客点击"确认预约"
  ↓
前端检查登录状态
  ↓
未登录 → 提示"请先登录" → 跳转登录页面

后端需要做的

如果希望游客可以查看服务列表,后端需要修改以下接口的权限:

  1. /api/category/all - 获取服务分类
  2. /api/service/list - 获取服务列表
  3. /api/service/search - 搜索服务

修改方式: 允许这些接口在没有token的情况下也能访问(匿名访问)

修改的文件

peidu/uniapp/src/utils/request.js

修改点1: 移除游客模式提前拦截

// ❌ 删除了这段代码
// if (isGuest && !isGuestAllowedUrl(options.url)) {
//   reject({ code: 401, message: '未登录', silent: true })
//   return
// }

修改点2: 简化token添加逻辑

// ✅ 简化为
if (token) {
  header['Authorization'] = buildAuthHeader(token)
}

修改点3: 游客模式401静默失败

// HTTP 401
if (isGuest && isGuestAllowedUrl(options.url)) {
  console.log('[Request] 游客模式白名单接口返回401静默失败:', options.url)
  reject({ code: 401, message: '未登录', silent: true })
  return
}

// 业务码 401
if (isGuest && isGuestAllowedUrl(options.url)) {
  console.log('[Request] 游客模式白名单接口业务码401静默失败:', options.url)
  reject({ code: 401, message: '未登录', data: res.data, silent: true })
  return
}

peidu/uniapp/src/pages/service/list.vue

修改点: 错误处理优化

catch (error) {
  console.error('加载服务分类失败:', error)
  // ✅ 游客模式:静默失败,不显示错误提示
  if (error.silent) {
    console.log('游客模式,静默失败,不显示提示')
  } else {
    uni.showToast({ title: '加载分类失败', icon: 'none' })
  }
}

测试场景

场景1: 后端支持匿名访问(理想情况)

游客访问服务列表
  ↓
✅ 正常显示服务分类
✅ 正常显示服务列表
✅ 可以搜索服务
✅ 点击"确认预约"时提示登录

场景2: 后端不支持匿名访问(当前情况)

游客访问服务列表
  ↓
❌ 后端返回401
  ↓
✅ 前端静默失败(不弹窗)
✅ 页面显示为空
✅ 不影响用户体验

场景3: 已登录用户

已登录用户访问服务列表
  ↓
✅ 正常显示服务分类
✅ 正常显示服务列表
✅ 可以搜索服务
✅ 可以正常预约

优势

  1. 最小改动 - 只修改了必要的地方
  2. 不破坏现有功能 - 已登录用户不受影响
  3. 灵活性 - 后端可以自由决定是否支持匿名访问
  4. 用户体验 - 游客模式下不会频繁弹窗

后续建议

强烈建议联系后端开发人员,让他们修改服务接口的权限控制,允许匿名访问。这样:

  • 游客可以浏览服务列表
  • 可以吸引更多用户注册
  • 提升用户体验

执行步骤

  1. 代码已修改完成
  2. 执行清除缓存脚本
  3. 重新编译小程序
  4. 测试游客模式
  5. 联系后端修改接口权限(如果需要)

修复时间: 2026-02-01
修复人员: Kiro AI
状态: 代码已修改,等待测试