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

182 lines
4.4 KiB
Markdown
Raw Permalink Normal View History

2026-02-28 17:26:03 +08:00
# 游客模式最终修复方案
## 修复思路
**核心原则**: 游客模式下不带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**: 移除游客模式提前拦截
```javascript
// ❌ 删除了这段代码
// if (isGuest && !isGuestAllowedUrl(options.url)) {
// reject({ code: 401, message: '未登录', silent: true })
// return
// }
```
**修改点2**: 简化token添加逻辑
```javascript
// ✅ 简化为
if (token) {
header['Authorization'] = buildAuthHeader(token)
}
```
**修改点3**: 游客模式401静默失败
```javascript
// 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
**修改点**: 错误处理优化
```javascript
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
**状态**: 代码已修改,等待测试