Я работаю над реализацией некоторых вызовов 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-клиент для того же вызова?