Files
newToy/SPOTIFY_AUTH_FIXED.md
2025-11-23 23:55:10 +08:00

3.2 KiB
Raw Permalink Blame History

Spotify 授权错误已修复

🐛 问题

之前遇到的错误:

#error=unsupported_response_type

🔧 原因

Spotify 已经不再支持 Implicit Grant Flowresponse_type=token),这种授权方式已被弃用。

解决方案

已将授权流程升级为 Authorization Code Flow with PKCE

主要变更

  1. 授权方式

    • 旧版:response_type=tokenImplicit Grant
    • 新版:response_type=code + PKCE
  2. 回调参数

    • 旧版:#access_token=...URL hash
    • 新版:?code=...URL query string
  3. 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. 测试授权

  1. 访问应用
  2. 点击 "连接 Spotify 账号"
  3. 应该能正常跳转到 Spotify 授权页面
  4. 授权后正确返回应用

修复后的优势

  1. 更安全

    • 不需要暴露 Client Secret
    • 防止授权码拦截攻击
    • 使用动态生成的验证码
  2. 符合标准

    • Spotify 官方推荐方式
    • 符合 OAuth 2.0 最佳实践
    • 未来兼容性更好
  3. 更稳定

    • 不会再出现 unsupported_response_type 错误
    • 不受 Implicit Grant 弃用影响

🔍 技术细节

修改的文件

  1. src/services/spotifyService.ts

    • 添加 PKCE 相关方法:
      • generateRandomString() - 生成随机字符串
      • sha256() - SHA-256 哈希
      • base64encode() - Base64 URL 编码
      • exchangeCodeForToken() - 交换授权码
    • 更新 getAuthorizationUrl() - 生成 PKCE 授权 URL
    • 更新 handleCallback() - 处理授权码回调
  2. src/views/MusicRhythm.vue

    • initSpotify() 改为异步函数
    • connectSpotify() 改为异步函数
    • 回调检测从 hash 改为 query string
  3. 文档更新

    • SPOTIFY_SETUP.md
    • QUICK_START.md
    • README_SPOTIFY.md

📚 参考资料

🎉 现在可以使用了!

授权流程已完全修复,可以正常使用 Spotify 功能了。

# 启动应用
npm run dev

# 访问
http://localhost:5173/

享受音乐律动吧!🎵