Аутентифицирован для поиска лучших треков Исполнителей и создания списка воспроизведения, но теряет аутентификацию при добавлении треков в список воспроизведения - PullRequest
0 голосов
/ 10 ноября 2018

Извините за запутанный заголовок. Я работаю над проектом, который собирает лучшие 5 песен артистов в плейлист для пользователя. Я нахожусь на контрольно-пропускном пункте на последнем этапе процесса, и я застрял.

Мой токен доступа работает, когда я ищу пять лучших треков артистов, и работает, когда я создаю плейлист. Я могу подтвердить получение идентификаторов треков и увидеть, что в моем приложении Spotify создан список воспроизведения, но при попытке добавить треки в список воспроизведения появляется ошибка 401.

Я использую passport-spotify для аутентификации, и область действия установлена ​​на ["user-read-private, playlist-modify-private, playlist-modify-public"].

Поскольку я могу добавлять большое количество песен в список воспроизведения в зависимости от количества исполнителей, я передаю uris песни в тело запроса axios. Вот документация для добавления треков в плейлист .

Я могу проверить в объекте ошибки, что токен доступа и uris передаются в почтовый вызов.

Я выложу свой код для вызова 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 Ответ

0 голосов
/ 10 ноября 2018

Неправильный синтаксис для Uris.

Решение:

  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}`
          }
        }
      )
...