olgenn
@olgenn
Frontend-developer

Почему метод fetch не устанавливает headers-запроса?

В react приложении не получается установить headers для fetch запроса. Пытаюсь сделать Basic Auth. Причем если ставлю
credentials: 'include'
то в окне браузера появляется окно авторизации

Код
let
			headers = new Headers({
				'Content-Type': 'application/json',
				'Authorization': `Basic ${btoa('****:*****')}`
			});

		fetch(url, {
			headers: headers,
			mode: 'no-cors',
			credentials: 'include',
		})
			.then(response => {
				console.log(headers.get('Authorization')); // В консоль выводит то что должно быть в headers

				if (response.status >= 200 && response.status < 300) {
					return response.json();
				} else {
					throw response;
				}
			})
			.then(objects => dispatch({
				type: types.GET_OBJECTS_SUCCESS,
				payload: objects
			}));


А вот скриншот из браузера
09732bb5b4894f708e69b49b52d366f0.png
  • Вопрос задан
  • 2872 просмотра
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
На счет нативного fetch, в MDN пример следующий:

var myHeaders = new Headers();

myHeaders.append('Content-Type', 'text/xml');
myHeaders.get('Content-Type') // should return 'text/xml'


Я использую библиотеку isomorphic-fetch.
Для заголовков есть пара хелперов, выглядит так:

export function httpGet(url) {
  return fetch(url, {
    headers: buildHeaders(),
  })
  .then(checkStatus)
}


Заголовки строю следующим образом:

function buildHeaders() {
  const authToken = localStorage.getItem('myapp.token')
  return { ...defaultHeaders, Authorization: authToken }
}


Изначально, значение у defaultHeaders следующее

const defaultHeaders = {
  Accept: 'application/json',
  'Content-Type': 'application/json',
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы