Я создаю приложение React, которое извлекает различную статистику из сервисов для наших внутренних разработчиков (коммиты, отслеживаемые часы и т. Д.).
Я использую fetch для получения данных API из Harvest, приложения для отслеживания времени. Согласно их документации, вы можете использовать базовую аутентификацию HTTP. Когда я использую приложение Postman, все в порядке, и я прекрасно вижу ответ. Изначально я использовал:
getHarvest(){
// Set Harvest Headers
const harvestHeaders = {
method: 'GET',
headers: {
'Authorization': 'Basic xxxxxxxxxxxxxxx=',
'Content-Type': 'application/json',
'Accept': 'application/json',
'Cache-Control': 'no-cache',
}
};
fetch('https://factor1.harvestapp.com/projects/', harvestHeaders)
.then( response => response.json() )
.then( projects => {
// Do some stuff
} )
}
Это дает мне ошибку в консоли:
API Fetch не может загрузить https://myaccount.harvestapp.com/projects/. Ответ на предполетный запрос не проходит проверку контроля доступа: на запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Следовательно, к источнику 'http://localhost:3000' не разрешен доступ. Ответ имел код состояния HTTP 404. Если непрозрачный ответ соответствует вашим потребностям, установите режим запроса на «no-cors», чтобы получить ресурс с отключенным CORS.
Итак, с этой обратной связью я изменил функцию, чтобы она выглядела так:
getHarvest(){
// Set Harvest Headers
const harvestHeaders = {
method: 'GET',
mode: 'no-cors',
headers: {
'Authorization': 'Basic xxxxxxxxxxxxxxx=',
'Content-Type': 'application/json',
'Accept': 'application/json',
'Cache-Control': 'no-cache',
}
};
fetch('https://factor1.harvestapp.com/projects/', harvestHeaders)
.then( response => response.json() )
.then( projects => {
// do stuff
} )
}
Но это приводит к ошибке аутентификации:
GET https://myaccount.harvestapp.com/projects/ 401 (Unauthorized)
Я не знаю, как правильно получить ответ. Я делаю что-то неправильно? Мне кажется странным, что использование приложения Postman работает, но это не так. Мысли? Спасибо!