已通过身份验证以搜索艺术家的热门曲目并创建播放列表,但在将曲目添加到播放列表时会失去身份验证
Authenticated to search for Artists' top tracks and create a playlist, but lose authentication when adding tracks to playlist
抱歉,标题令人困惑。我正在从事一个项目,该项目将一些艺术家的前 5 首歌曲编译成用户的播放列表。我 运行 在过程的最后一步遇到了障碍,我被卡住了。
我的访问令牌在我搜索艺术家的前五首曲目时有效,在我创建播放列表时有效。我可以验证是否收到曲目 Spotify ID,并看到播放列表是在我的 Spotify 应用程序上创建的,但是当我尝试将曲目添加到播放列表时遇到 401 错误。
我正在使用 passport-spotify 进行身份验证,范围设置为 ["user-read-private, playlist-modify-private, playlist-modify-public"]。
由于我可能会根据艺术家的数量向播放列表添加大量歌曲,因此我将歌曲 uri 传递到 axios 请求的 body 中。这是 adding tracks to a playlist.
的文档
我可以在错误 object 中验证访问令牌和 uris 正在传递到 post 调用中。
我将 post 我的代码用于下面的 addTracks axios 调用,我也非常乐意在错误 object 中分享信息。如果你想看授权码,我也会post那个。
感谢观看!
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));
});
};
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}`
}
}
)
抱歉,标题令人困惑。我正在从事一个项目,该项目将一些艺术家的前 5 首歌曲编译成用户的播放列表。我 运行 在过程的最后一步遇到了障碍,我被卡住了。
我的访问令牌在我搜索艺术家的前五首曲目时有效,在我创建播放列表时有效。我可以验证是否收到曲目 Spotify ID,并看到播放列表是在我的 Spotify 应用程序上创建的,但是当我尝试将曲目添加到播放列表时遇到 401 错误。
我正在使用 passport-spotify 进行身份验证,范围设置为 ["user-read-private, playlist-modify-private, playlist-modify-public"]。
由于我可能会根据艺术家的数量向播放列表添加大量歌曲,因此我将歌曲 uri 传递到 axios 请求的 body 中。这是 adding tracks to a playlist.
的文档我可以在错误 object 中验证访问令牌和 uris 正在传递到 post 调用中。
我将 post 我的代码用于下面的 addTracks axios 调用,我也非常乐意在错误 object 中分享信息。如果你想看授权码,我也会post那个。
感谢观看!
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));
});
};
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}`
}
}
)