使用Spotify Web API获取当前播放曲目时遭遇401错误(Permissions missing)的技术求助
解决Spotify Web API获取当前播放曲目时的401 Permissions Missing错误
我一眼就看到你代码里的关键问题——授权URL的scope参数格式写错了,这直接导致你请求的权限根本没被正确传递给Spotify的认证服务。
核心问题分析
你构建授权URL的代码里,scope参数部分多了一个多余的&:
window.location.href = `${apiUrl}?client_id=${clientId}&redirect_uri=${redirectUrl}&scope=&${scope.join( " " )}&response_type=token&show_dialog=true`
这里的&scope=&${scope.join(...)}会让scope的实际值为空字符串,后面的权限列表变成了URL里的无效独立参数(比如user-read-email会被当作无值参数)。Spotify的认证服务根本没收到你请求的user-read-currently-playing权限,所以调用对应API时自然返回401权限缺失错误。
修正后的授权URL代码
把多余的&去掉,同时建议用%20显式编码空格作为scope的分隔符(避免浏览器自动编码可能出现的问题):
window.location.href = `${apiUrl}?client_id=${clientId}&redirect_uri=${redirectUrl}&scope=${scope.join( "%20" )}&response_type=token&show_dialog=true`
后续验证步骤
- 重新授权检查权限:修改代码后,重新走一遍用户授权流程,确认授权界面上显示了
Read your currently playing track这个权限(Spotify的授权界面样式会不定期更新,只要权限列表包含该选项就没问题)。 - 解析Token确认权限:拿到新的access token后,用jwt.io解析它,检查payload里的
scope字段是否包含user-read-currently-playing。 - 重新测试API调用:用新获取的token调用
/v1/me/player/currently-playing接口,应该就能正常返回数据了。
补充说明
你提到其他API(比如获取播放列表、用户信息)能正常调用,是因为这些接口需要的user-read-private、user-read-email等权限,可能在旧token或其他流程中已经正确获取,但user-read-currently-playing这个权限一直没被正确请求,所以只有这个接口报错。
内容的提问来源于stack exchange,提问作者Michael Oviedo
相关产品推荐
相关产品推荐

