Авторизация Spotify от Node Server не работает с curl - PullRequest
0 голосов
/ 28 января 2020

У меня есть сервер узлов, который получает токен доступа из веб-API Spotify. Ответ выглядит следующим образом:

Response:
{
  "statusCode": 200,
  "body": "{\"type\":\"success\",\"done\":{\"json\":{\"access_token\":\"BQDqtYhVpafUIMYtZbwmy6iJcC_wvzR9Xrw6bRDFfpL3zZYfkCp2-KZaQVS-ZoElMF1czAl_B1vEaDrtPBOElSV3D5k\",\"token_type\":\"Bearer\",\"expires_in\":3600,\"scope\":\"user-top-read\"}}}",
  "headers": {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token"
  }
}

Когда я пытаюсь использовать access_token в онлайн-инструменте API Spotify , я получаю ошибку для неполного JSON. Я думаю, это потому, что генерируемый мной токен имеет длину всего 91 символ, а генерируемый ими код - 171 символ. Почему мой код авторизации такой короткий?

Мне нужен токен доступа, чтобы я мог использовать этот модуль реакции для доступа к моим главным трекам.

Вот мой код для получения токена доступа:

let getAccessToken = (queryStringParameters) => {
        let url = 'https://accounts.spotify.com/api/token';
        let encoded = (new Buffer(client_id + ':' + client_secret).toString('base64'));
        console.log("encoded = " + encoded);

        let params = {
            grant_type: 'authorization_code',
            username: username,
            password: password,
            scope: scope
        };

        const formParams = Object.keys(params).map((key) => {
            return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
        }).join('&');

        return fetch(url, {
            method: 'POST',
            headers: {
                "Authorization": 'Basic ' + encoded,
                'Accept': 'application/json',
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: formParams
        })
            .then((response) => {
                console.log(util.inspect(response, { showHidden: true, depth: null }));
                return response.json();
            })
            .catch((error) => {
                done({
                    error: error
                });
            });
    };

1 Ответ

0 голосов
/ 29 января 2020

В соответствии с Руководством по авторизации authorization_code тип предоставления принимает только значения code и redirect URI . Не уверен, почему предоставленные вами имя пользователя и пароль даже принимаются, возможно, возвращаемый токен является учетными данными клиента, так как они имеют тенденцию быть короче, которые получают доступ только к не связанным с пользователем конечным точкам, таким как загрузка данных Artist, но к параметрам, которые вы повторное предоставление, по-видимому, недокументировано по крайней мере в этом руководстве.

...