4.4 KiB
4.4 KiB
游客模式最终修复方案
修复思路
核心原则: 游客模式下不带token访问服务接口,让后端决定是否允许匿名访问。
修改内容
1. request.js - 请求拦截器
修改1: 移除游客模式的提前拦截
之前: 游客访问非白名单接口时,前端直接拦截 现在: 允许游客访问所有接口,由后端决定是否允许
修改2: 游客模式不带token
之前: 游客访问白名单接口时也不带token 现在: 游客模式下所有请求都不带token
修改3: 401错误静默处理
之前: 游客访问白名单接口返回401时返回空数据 现在: 游客访问白名单接口返回401时静默失败(不弹窗)
2. service/list.vue - 服务列表页面
修改: 错误处理优化
添加: 检查 error.silent 标志,如果是静默失败则不显示错误提示
工作流程
游客模式访问服务列表
游客打开服务列表
↓
前端发送请求(不带token)
↓
后端判断:
├─ 支持匿名访问 → 返回真实数据 ✅
└─ 不支持匿名访问 → 返回401 ❌
↓
前端静默失败(不弹窗)
↓
页面显示为空
游客模式预约服务
游客点击"确认预约"
↓
前端检查登录状态
↓
未登录 → 提示"请先登录" → 跳转登录页面
后端需要做的
如果希望游客可以查看服务列表,后端需要修改以下接口的权限:
/api/category/all- 获取服务分类/api/service/list- 获取服务列表/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: 已登录用户
已登录用户访问服务列表
↓
✅ 正常显示服务分类
✅ 正常显示服务列表
✅ 可以搜索服务
✅ 可以正常预约
优势
- 最小改动 - 只修改了必要的地方
- 不破坏现有功能 - 已登录用户不受影响
- 灵活性 - 后端可以自由决定是否支持匿名访问
- 用户体验 - 游客模式下不会频繁弹窗
后续建议
强烈建议联系后端开发人员,让他们修改服务接口的权限控制,允许匿名访问。这样:
- ✅ 游客可以浏览服务列表
- ✅ 可以吸引更多用户注册
- ✅ 提升用户体验
执行步骤
- ✅ 代码已修改完成
- ⏳ 执行清除缓存脚本
- ⏳ 重新编译小程序
- ⏳ 测试游客模式
- ⏳ 联系后端修改接口权限(如果需要)
修复时间: 2026-02-01
修复人员: Kiro AI
状态: 代码已修改,等待测试