已通过身份验证搜索艺术家的热门曲目并创建播放列表,但在将曲目添加到播放列表时失去身份验证

Posted

技术标签:

【中文标题】已通过身份验证搜索艺术家的热门曲目并创建播放列表,但在将曲目添加到播放列表时失去身份验证【英文标题】:Authenticated to search for Artists' top tracks and create a playlist, but lose authentication when adding tracks to playlist 【发布时间】:2019-04-13 15:45:23 【问题描述】:

对不起,令人困惑的标题。我正在开展一个项目,该项目将许多艺术家的前 5 首歌曲编译为用户的播放列表。我在流程的最后一步遇到了障碍,我被卡住了。

我的访问令牌在我搜索艺术家的前五首曲目时有效,在我创建播放列表时有效。我可以验证是否接收到 track spotify id 并查看播放列表是在我的 Spotify 应用上创建的,但是当我尝试将曲目添加到播放列表时遇到 401 错误。

我正在使用 passport-spotify 进行身份验证,并且范围设置为 ["user-read-private, playlist-modify-private, playlist-modify-public"]。

由于我可以根据艺术家的数量将大量歌曲添加到播放列表中,因此我将歌曲 uris 传递到 axios 请求的正文中。这是adding tracks to a playlist 的文档。

我可以在错误对象中验证访问令牌和 uri 正在传递到 post 调用中。

我将在下面发布我的 addTracks axios 调用代码,我也非常乐意在错误对象中分享信息。如果您想查看授权码,我也会发布。

感谢观看!

const addTracks = (req, res) => 
  let chunk = 100;
  let result = [];

  console.log('FINAL TRACKS: ', finalTracks);
  console.log('addTracks REQ.BODY: ', req.body);
  console.log('addTracks REQ.USER: ', req.user);

  for (let i = 0; i < finalTracks.length; i += chunk) 
    result.push(finalTracks.slice(i, i + chunk));
    console.log('result: ', result);
  

  result.map(chunkArr => 
    axios
      .post(
        `https://api.spotify.com/v1/playlists/$req.body.playlist.id/tracks`,
        
          headers: 
            Authorization: `Bearer $req.user.accessToken`,
            'Content-Type': 'application/json'
          
        ,
        
          body: 
            uris: JSON.stringify(chunkArr)
          
        
      )
      .then(resp => 
        // console.log(resp);
        // res.status(200).json(resp);
        console.log('awaiting promise resolution');
      )
      .catch(err => console.log('addTracks > result.map catch: ', err));
  );
;

【问题讨论】:

【参考方案1】:

uri 的语法不正确。

解决方案:

  result.map(chunkArr => 
    axios
      .post(
        `https://api.spotify.com/v1/playlists/$req.body.playlist.id/tracks`,
        
            uris: chunkArr
        ,
        
          headers: 
            Accept: 'application/json',
            'Content-Type': 'application/json',
            Authorization: `Bearer $req.user.accessToken`
          
        
      )

【讨论】:

以上是关于已通过身份验证搜索艺术家的热门曲目并创建播放列表,但在将曲目添加到播放列表时失去身份验证的主要内容,如果未能解决你的问题,请参考以下文章

返回热门曲目 Spotify API

使用 Spotify Web API 播放曲目

如何在 Spotify 上获取艺术家的所有歌曲?

如何在 Spotify 中自动播放热门曲目?

使用 spotify-web-api-js 在 javascript 中获取 Spotify 艺术家的热门曲目

阅读艺术家列表,使用 Spotipy 将热门歌曲添加到播放列表