Другой ответ от Spotify API при вызове конечных точек из клиента Javascript против REST - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над реализацией некоторых вызовов Spotify в проект с использованием Spotify API, и первое, что мне нужно сделать, - это аутентификация.Я протестировал конечную точку API Spotify с помощью Restlet (клиент REST API), и мой вызов был успешным с ответом:

{"access_token": "BQC2PbOsWsnkfzcMUMW5YeJh9VGgE7uSQ-ubpO5kekyfWW6W6F6W6W6S0W6S0W6S0W5S0W6S0W6S0R5F0R5F0W0W6S0R5F0R0W6S0W6S0R5F0R0W6S0R0W6S0R5F0R0W5":" Bearer "," expires_in ": 3600," scope ":" "}

Затем я реализовал вызов POST в своем приложении React с использованием javascript, и он сработал!

async function getSpAccessToken(component) {
    const [initSpotResponse] = await Promise.all([
        axios.post("https://accounts.spotify.com/api/token",
            querystring.stringify({
                grant_type: 'client_credentials'
            }),
            {
                headers: {
                    'Authorization': `Basic ${encodedString}`,
                    'Content-type': 'application/x-www-form-urlencoded'
                }
            }
        ).catch((error) => {
            console.log("getSpAccessToken ERROR = " + JSON.stringify(error))
        })
    ]);
    const spAccessToken = await initSpotResponse.data.access_token 

}

Но в конце концов, когда срок действия токена истекает, мои вызовы Spotify отвечают сообщением «access_token expired», как и ожидалось.Я возвращаюсь и повторно аутентифицируюсь, используя ту же самую функцию getSpAccessToken(), но я получаю это как ответ:

{
  "data": "",
  "status": 200,
  "statusText": "OK",
  "headers": {},
  "config": {
    "transformRequest": {},
    "transformResponse": {},
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "Content-Type": "application/x-www-form-urlencoded",
      "Authorization": "Basic ZmY1NmFiZTc3OTJmNDI2ZWE0MWE3NzFkNzA3ZDY2OTaA6YjJjY2EyZGVkZDM5NDliMGE2YzVlMTU4MjQ0NmM5YzU="
    },
    "method": "post",
    "url": "https://accounts.spotify.com/api/token",
    "data": "grant_type=client_credentials"
  },
  "request": {}
}

Ответ сбивает с толку, потому что a) код состояния в порядке и b) потому что data поле не заполнено (здесь находится токен доступа).Затем я пытаюсь использовать свой REST-клиент Restlet, чтобы повторить тот же вызов, и в ответе я получаю access_token!Затем я возвращаюсь и обновляю свою страницу, и моя getSpAccessToken() функция вызывается, и на этот раз она возвращает объект данных:

{
  "data": {
    "access_token": "BQCuvTWeJlixkOsuAhKPClKWaXTaSPiuycNY6Z2EKKQLqsDyGyXdDcn4RR4tVq6--1HHJ_l1ViDlCi_mN_bk",
    "token_type": "Bearer",
    "expires_in": 3600,
    "scope": ""
  },
  "status": 200,
  "statusText": "OK",
  "headers": {
    "content-type": "application/json"
  },
  "config": {
    "transformRequest": {},
    "transformResponse": {},
    "timeout": 0,
    "xsrfCookieName": "XSRF-TOKEN",
    "xsrfHeaderName": "X-XSRF-TOKEN",
    "maxContentLength": -1,
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "Content-Type": "application/x-www-form-urlencoded",
      "Authorization": "Basic ZmY1NmFiZTc3OTJmNDI2ZWE0MWE3NzFkNzA3ZDY2OaTA6YjJjY2EyZGVkZDM5NDliMGE2YzVlMTU4MjQ0NmM5YzU="
    },
    "method": "post",
    "url": "https://accounts.spotify.com/api/token",
    "data": "grant_type=client_credentials"
  },
  "request": {}
}

Мой вопрос: почему, когда мне нужно обновить токен, мойjavascript getSpAccessToken() call возвращает ответ с пустым полем data до тех пор, пока я не использую свой REST-клиент для того же вызова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...