添加了一个修改

This commit is contained in:
rucky
2025-11-23 23:55:10 +08:00
commit cefc2a1653
46 changed files with 10659 additions and 0 deletions

173
DEBUG_REDIRECT_ISSUE.md Normal file
View File

@@ -0,0 +1,173 @@
# 🔍 调试 Spotify 回调问题
## 🐛 问题描述
**症状:**
授权成功,但返回的 URL 是:
```
https://sports.rucky.cn/?code=...&state=...#/%2Fcallback
```
而不是期望的:
```
https://sports.rucky.cn/callback?code=...&state=...
```
## 🎯 可能的原因
### 1. Spotify Dashboard 配置错误
检查 Spotify Dashboard 中是否配置了:
```
❌ 错误https://sports.rucky.cn/
✅ 正确https://sports.rucky.cn/callback
```
**解决方案:**
1. 访问 https://developer.spotify.com/dashboard/4ed200672ba1421baa31b9859bd84d39/settings
2. 点击 "Edit Settings"
3. 检查 "Redirect URIs" 中是否有 `https://sports.rucky.cn/callback`
4. 如果只有 `https://sports.rucky.cn/`,需要:
- 删除 `https://sports.rucky.cn/`
- 添加 `https://sports.rucky.cn/callback`
5. 点击 "Save"
### 2. 代码中 redirect_uri 不一致
检查代码中的配置:
**src/views/MusicRhythm.vue:**
```typescript
const REDIRECT_URI = window.location.origin + '/callback'
// 应该生成https://sports.rucky.cn/callback
```
**验证方法:**
在浏览器控制台运行:
```javascript
console.log(window.location.origin + '/callback')
// 应该输出https://sports.rucky.cn/callback
```
### 3. 缓存问题
如果之前配置了 `https://sports.rucky.cn/`,浏览器可能缓存了旧的授权请求。
**解决方案:**
```bash
# 清除所有相关的 localStorage
localStorage.removeItem('spotify_code_verifier')
localStorage.removeItem('spotify_auth_state')
localStorage.removeItem('spotify_access_token')
localStorage.removeItem('spotify_token_expires_at')
# 或者使用无痕模式重试
```
## ✅ 已实施的临时修复
`src/views/Home.vue` 中添加了检测和转发逻辑:
```typescript
onMounted(() => {
// 检查是否是 Spotify 授权回调
const params = new URLSearchParams(window.location.search)
if (params.has('code')) {
// 转发到 /callback 路由处理
router.push({
name: 'SpotifyCallback',
query: Object.fromEntries(params)
})
}
})
```
这样即使 Spotify 返回到根路径,也会自动转发到正确的回调页面。
## 🧪 测试步骤
### 1. 清除缓存
```javascript
// 在浏览器控制台运行
localStorage.clear()
```
### 2. 确认配置
访问https://developer.spotify.com/dashboard/4ed200672ba1421baa31b9859bd84d39/settings
应该看到:
```
Redirect URIs:
✅ http://localhost:5173/callback
✅ https://sports.rucky.cn/callback
```
### 3. 重新部署
```bash
npm run build
rsync -avz --delete dist/ user@sports.rucky.cn:/var/www/sports.rucky.cn/
```
### 4. 测试授权流程
1. 访问 https://sports.rucky.cn/
2. 进入音乐律动页面
3. 点击 "连接 Spotify 账号"
4. 授权后应该:
- 返回到应用(可能是根路径)
- 自动转发到 SpotifyCallback 页面
- 显示 "授权成功!"
- 自动跳转到音乐律动页面
## 🔧 完整修复方案
### 方案 A修复 Redirect URI 配置(推荐)
**优点:** 符合标准,最干净的解决方案
**步骤:**
1. 在 Spotify Dashboard 中**只配置** `/callback` 路径
2. 删除其他可能的配置
3. 等待几分钟让配置生效
4. 测试
### 方案 B使用根路径 + 转发(当前方案)
**优点:** 容错性强,即使配置错误也能工作
**缺点:** URL 中会短暂出现 code 参数
**状态:** 已实施 ✅
## 📝 最佳实践
根据 Spotify 官方文档Redirect URI 应该:
1. ✅ 使用具体的路径(如 `/callback`
2. ✅ 在 Dashboard 中精确匹配
3. ✅ 包括协议、域名、端口、路径
4. ❌ 避免使用根路径 `/`
**推荐配置:**
```
开发http://localhost:5173/callback
生产https://sports.rucky.cn/callback
```
## 🎯 下一步
1. **立即做:** 确认 Spotify Dashboard 中的配置
2. **如果错误:** 修改为 `/callback` 并保存
3. **清除缓存:** 使用无痕模式测试
4. **重新测试:** 完整走一遍授权流程
## 📞 如果还有问题
检查浏览器控制台的日志:
```javascript
// 应该看到类似的日志
"Detected Spotify callback, redirecting to /callback route"
```
如果看到这条日志,说明我们的临时修复生效了,即使 Redirect URI 配置不正确,也能正常工作。
---
**总结:** 大概率是 Spotify Dashboard 中配置了 `https://sports.rucky.cn/` 而不是 `https://sports.rucky.cn/callback`。修改配置即可完美解决。同时我们的代码已经添加了容错逻辑。✅