131 lines
3.8 KiB
Markdown
131 lines
3.8 KiB
Markdown
|
|
# 我的记录数据不显示问题排查
|
||
|
|
|
||
|
|
## 问题描述
|
||
|
|
- 管理端显示用户"道玄"(ID: 121)有完整的活动记录数据
|
||
|
|
- 移动端"我的记录"页面显示"暂无记录"
|
||
|
|
|
||
|
|
## 问题分析
|
||
|
|
|
||
|
|
### 数据流程
|
||
|
|
```
|
||
|
|
Android App → HTTP请求(带Token) → 后端拦截器验证Token → Controller获取userId → Service查询数据 → 返回结果
|
||
|
|
```
|
||
|
|
|
||
|
|
### 关键代码路径
|
||
|
|
1. **Android端Token发送**: `ApiClient.java` 中的 `auth` 拦截器
|
||
|
|
2. **后端Token验证**: `FrontTokenInterceptor.java` → `FrontTokenComponent.check()`
|
||
|
|
3. **获取用户ID**: `UserService.getUserId()` → `FrontTokenComponent.getUserId()`
|
||
|
|
4. **数据查询**: `UserActivityRecordService.getViewHistory()` 等方法
|
||
|
|
|
||
|
|
### 可能的问题原因
|
||
|
|
|
||
|
|
1. **Token未正确发送**
|
||
|
|
- `ApiClient.appContext` 为 null
|
||
|
|
- `AuthStore.getToken()` 返回 null
|
||
|
|
|
||
|
|
2. **Token在Redis中不存在或已过期**
|
||
|
|
- Token过期时间: 24小时 (`TOKEN_EXPRESS_MINUTES = 60 * 24`)
|
||
|
|
- Redis key格式: `TOKEN_USER:` + token
|
||
|
|
|
||
|
|
3. **Token格式不匹配**
|
||
|
|
- 后端期望的Header: `Authori-zation`(注意中间有连字符)
|
||
|
|
|
||
|
|
## 已添加的调试日志
|
||
|
|
|
||
|
|
### Android端 (Logcat TAG: MyRecords, ApiClient)
|
||
|
|
```
|
||
|
|
加载记录: type=view, page=1, userId=xxx
|
||
|
|
Token状态: 存在, 长度=32, 前20字符=xxx...
|
||
|
|
请求URL: http://xxx/api/front/activity/view/history
|
||
|
|
请求头Authori-zation: xxx
|
||
|
|
添加Token到请求头: xxx...
|
||
|
|
```
|
||
|
|
|
||
|
|
### 后端 (搜索关键字)
|
||
|
|
```
|
||
|
|
[FrontTokenInterceptor] URI=xxx, rawToken=xxx, processedToken=xxx
|
||
|
|
[FrontTokenInterceptor] Token验证结果: true/false
|
||
|
|
[FrontTokenComponent] getUserId: rawToken=xxx, processedToken=xxx, redisKey=xxx, exists=true/false, userId=xxx
|
||
|
|
【观看历史】请求头Token: xxx
|
||
|
|
【观看历史】请求参数: userId=xxx, targetType=xxx, page=1, pageSize=20
|
||
|
|
【观看历史】返回结果: userId=xxx, total=xxx, listSize=xxx
|
||
|
|
```
|
||
|
|
|
||
|
|
## 调试步骤
|
||
|
|
|
||
|
|
### 1. 检查Android端Token
|
||
|
|
```bash
|
||
|
|
# 在Logcat中过滤
|
||
|
|
adb logcat -s MyRecords ApiClient AuthStore
|
||
|
|
```
|
||
|
|
|
||
|
|
预期输出:
|
||
|
|
- Token状态: 存在
|
||
|
|
- 添加Token到请求头: xxx...
|
||
|
|
|
||
|
|
### 2. 检查后端Token验证
|
||
|
|
查看后端日志,搜索 `[FrontTokenInterceptor]`
|
||
|
|
|
||
|
|
预期输出:
|
||
|
|
- rawToken 不为 null
|
||
|
|
- Token验证结果: true
|
||
|
|
|
||
|
|
### 3. 检查Redis中的Token
|
||
|
|
```bash
|
||
|
|
# 连接Redis
|
||
|
|
redis-cli
|
||
|
|
|
||
|
|
# 查看Token是否存在
|
||
|
|
EXISTS TOKEN_USER:your_token_here
|
||
|
|
|
||
|
|
# 查看Token对应的userId
|
||
|
|
GET TOKEN_USER:your_token_here
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. 使用调试接口
|
||
|
|
Android端会自动调用 `api/front/activity/debug/token` 接口,查看返回结果:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"header_Authori-zation": "xxx",
|
||
|
|
"header_Authorization": "xxx",
|
||
|
|
"userId": 121,
|
||
|
|
"isLoggedIn": true
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 解决方案
|
||
|
|
|
||
|
|
### 如果Token未发送
|
||
|
|
1. 确保登录成功后Token已保存到SharedPreferences
|
||
|
|
2. 检查 `AuthStore.setToken()` 是否被正确调用
|
||
|
|
|
||
|
|
### 如果Token已过期
|
||
|
|
1. 重新登录获取新Token
|
||
|
|
2. 或者在Redis中手动延长Token过期时间
|
||
|
|
|
||
|
|
### 如果Token格式不匹配
|
||
|
|
1. 确保Android端发送的Header名称是 `Authori-zation`
|
||
|
|
2. 确保Token值不包含前缀 `TOKEN_USER:`
|
||
|
|
|
||
|
|
## 修改的文件列表
|
||
|
|
|
||
|
|
1. `zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiClient.java`
|
||
|
|
- 增强Token拦截器日志
|
||
|
|
|
||
|
|
2. `zhibo/android-app/app/src/main/java/com/example/livestreaming/MyRecordsActivity.java`
|
||
|
|
- 增加Token调试方法
|
||
|
|
- 增强请求日志
|
||
|
|
|
||
|
|
3. `zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
|
||
|
|
- 添加调试接口 `debugToken()`
|
||
|
|
|
||
|
|
4. `zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/interceptor/FrontTokenInterceptor.java`
|
||
|
|
- 增强Token验证日志
|
||
|
|
|
||
|
|
5. `zhibo/Zhibo/zhibo-h/crmeb-common/src/main/java/com/zbkj/common/token/FrontTokenComponent.java`
|
||
|
|
- 增强 `getUserId()` 方法日志
|
||
|
|
|
||
|
|
6. `zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/UserActivityRecordController.java`
|
||
|
|
- 增强各接口的请求日志
|
||
|
|
- 添加调试接口 `/debug/token`
|