Spotify Web API JS的getMyTopTracks调用失败,仅getMe()可用报403错误
问题解决:Spotify API getMyTopTracks返回403,仅getMe正常
你遇到的问题核心是权限范围(Scope)不匹配,因为Spotify不同API接口要求的授权权限不一样:
getMe()只需要基础用户身份权限(比如user-read-private)就能正常返回数据getMyTopTracks()必须要求user-top-read专属权限,授权时没申请这个权限就会返回403 Forbidden
具体解决步骤:
更新授权Scope配置
在发起Spotify授权请求的代码里,确保scope参数包含user-top-read。比如授权URL的scope部分应类似:const scopes = 'user-read-private user-top-read'; // 可根据需求添加其他必要权限 const authUrl = `https://accounts.spotify.com/authorize?client_id=${clientId}&response_type=code&redirect_uri=${redirectUri}&scope=${encodeURIComponent(scopes)}`;重新获取授权令牌
旧令牌是基于之前的scope生成的,不会自动更新权限。需要让用户重新走一遍授权流程,拿到包含新scope的令牌。验证令牌权限
解码你的JWT令牌(用JWT解码工具或代码解析),查看scope字段是否包含user-top-read。如果没有,说明授权流程仍有问题。排查低概率问题
- 确认
getMyTopTracks参数格式正确:你代码里的time_range: "medium_term"是合法取值(允许值:short_term/medium_term/long_term),这部分没问题。 - 检查请求头是否正确携带令牌:虽然
getMe()能工作,但要确认getMyTopTracks调用和getMe使用了同一个令牌实例,避免令牌不一致。
- 确认
内容的提问来源于stack exchange,提问作者Tatan22
相关产品推荐
相关产品推荐

