Получение 401 при попытке доступа к spotify web api с токеном доступа - PullRequest
0 голосов
/ 02 апреля 2019

Я использую стратегию spotify с паспортом Js для аутентификации.Затем я хочу использовать библиотеку оболочки spotify-web-api-node для вызовов для сортировки данных.Однако использование маркеров доступа и обновления, полученных при аутентификации для последующих вызовов, не работает.Я получаю 401 - несанкционированный при попытке сделать вызов для спойтизации для пользовательских данных.

Я попытался создать экземпляр SpotifyWebApiObject с токеном обновления и токеном доступа.Хотя я вижу в библиотеке, для выполнения звонков нужен только токен доступа.Я попытался войти и выйти, чтобы получить новые наборы токенов.

passport.use(new SpotifyStrategy({
    clientID: keys.spotifyClientID,
    clientSecret: keys.spotifyClientSecret,
    callbackURL: '/auth/spotify/callback',
    proxy: true
}, async (accessToken, refreshToken, profile, done) => {


    const spotifyId = profile.id;
    const name = profile.displayName;
    const email = profile.emails[0].value;

    console.log(profile.id)
    const existingUser = await User.findOne({ spotifyId: profile.id });

    if (existingUser) {
        let userCredentials = await UserCredential.findOne({ userId: spotifyId });

        if (!userCredentials) {
            return await new UserCredential({ userId: spotifyId, name, accessToken, refreshToken }).save();
        }
        console.log('always get existing user')
        userCredentials.accessToken = accessToken;
        userCredentials.refreshToken = refreshToken;
        return done(null, existingUser);
    }


    const user = await new User({ spotifyId }).save();
    await new UserCredential({ userId: spotifyId, name, accessToken, refreshToken }).save();

    done(null, user);
}));

Как только они сохраняются в БД.Я ищу пользователя и использую соответствующие маркеры доступа и обновления.

const getPlaylists = async (user) => {

    let spotifyData = await initiateSpotifyWebApi(user);

    spotifyData.getUserPlaylists(user.spotifyId).then((res) => {
        console.log('response is ===', res)
    }).catch((err) => console.error(err));

}

async function initiateSpotifyWebApi(user) {

    const creds = await UserCredential.findOne({ userId: user.spotifyId });
    const apiCaller = setUpApiObj(creds.refreshToken, creds.accessToken);

    return apiCaller
}

function setUpApiObj(refreshTok, accessTok) {
       const spotifyApi = new SpotifyWebApi({
        accessToken: accessTok,
        refreshToken: refreshTok
    });
    return spotifyApi;
}
getUserPlaylist()

возвращает ошибку

{ [WebapiError: Unauthorized] name: 'WebapiError', message: 'Unauthorized', statusCode: 401 }

Любая идея, почему я не могу получить доступ к API с помощьюэта библиотека, как я пытаюсь?

спасибо

1 Ответ

1 голос
/ 05 апреля 2019

Пара вещей, чтобы проверить.Это как раз то, что приходит на ум.Поправьте меня, если я на неправильном пути, и я постараюсь помочь дальше.

  1. Проверьте свои «области» при аутентификации через Spotify.Вы должны иметь правильные области для выполнения различных действий над API.См. Здесь: https://developer.spotify.com/documentation/general/guides/authorization-guide/

  2. Если вы получаете 401, используйте свой токен обновления (я вижу, что вы его храните), чтобы автоматически запрашивать, извлекать и перезаписывать текущий AccessToken, а затем снова выполнять запрос..

...