3.2 KiB
3.2 KiB
✅ Spotify 授权错误已修复
🐛 问题
之前遇到的错误:
#error=unsupported_response_type
🔧 原因
Spotify 已经不再支持 Implicit Grant Flow(response_type=token),这种授权方式已被弃用。
✨ 解决方案
已将授权流程升级为 Authorization Code Flow with PKCE:
主要变更
-
授权方式
- ❌ 旧版:
response_type=token(Implicit Grant) - ✅ 新版:
response_type=code+ PKCE
- ❌ 旧版:
-
回调参数
- ❌ 旧版:
#access_token=...(URL hash) - ✅ 新版:
?code=...(URL query string)
- ❌ 旧版:
-
Token 获取
- ❌ 旧版:直接从 URL 获取 access token
- ✅ 新版:使用授权码交换 access token
PKCE 流程
1. 生成 code_verifier (随机64位字符串)
↓
2. 计算 code_challenge (SHA-256 hash + base64)
↓
3. 请求授权 (带 code_challenge)
↓
4. 获取 authorization_code
↓
5. 用 code + code_verifier 交换 access_token
📝 需要做什么
1. 确保 Redirect URI 正确配置
在 Spotify Dashboard 中添加:
开发环境:
http://localhost:5173/
生产环境:
https://sports.rucky.cn/
⚠️ 重要提示:
- 必须包含最后的斜杠
/ - 协议必须匹配(http 或 https)
- 路径必须完全匹配
2. 重新构建应用
# 重新构建
npm run build
# 或启动开发服务器
npm run dev
3. 测试授权
- 访问应用
- 点击 "连接 Spotify 账号"
- 应该能正常跳转到 Spotify 授权页面
- 授权后正确返回应用
✅ 修复后的优势
-
更安全
- 不需要暴露 Client Secret
- 防止授权码拦截攻击
- 使用动态生成的验证码
-
符合标准
- Spotify 官方推荐方式
- 符合 OAuth 2.0 最佳实践
- 未来兼容性更好
-
更稳定
- 不会再出现
unsupported_response_type错误 - 不受 Implicit Grant 弃用影响
- 不会再出现
🔍 技术细节
修改的文件
-
src/services/spotifyService.ts
- 添加 PKCE 相关方法:
generateRandomString()- 生成随机字符串sha256()- SHA-256 哈希base64encode()- Base64 URL 编码exchangeCodeForToken()- 交换授权码
- 更新
getAuthorizationUrl()- 生成 PKCE 授权 URL - 更新
handleCallback()- 处理授权码回调
- 添加 PKCE 相关方法:
-
src/views/MusicRhythm.vue
initSpotify()改为异步函数connectSpotify()改为异步函数- 回调检测从 hash 改为 query string
-
文档更新
- SPOTIFY_SETUP.md
- QUICK_START.md
- README_SPOTIFY.md
📚 参考资料
🎉 现在可以使用了!
授权流程已完全修复,可以正常使用 Spotify 功能了。
# 启动应用
npm run dev
# 访问
http://localhost:5173/
享受音乐律动吧!🎵