Fetch API с Cookie

Я тестирую новый API Fetch, но у меня проблемы с Cookies. В частности, после успешного входа в систему, в будущих запросах есть заголовок Cookie, но Fetch, похоже, игнорирует эти заголовки, и все мои запросы, сделанные с помощью Fetch, являются несанкционированными.

Это потому, что Fetch еще не готов или Fetch не работает с Cookies?

Я создаю свое приложение с помощью Webpack. Я также использую Fetch in React Native, который не имеет такой же проблемы.

Ответ 1

Fetch не использует cookie по умолчанию. Чтобы включить cookie, сделайте следующее:

fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);

Ответ 2

В дополнение к ответу @Khanetor для тех, кто работает с запросами на кросс-начало: credentials: 'include'

Пример запроса выборки JSON:

fetch(url, {
  method: 'GET',
  credentials: 'include'
})
  .then((response) => response.json())
  .then((json) => {
    console.log('Gotcha');
  }).catch((err) => {
    console.log(err);
});

https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

Ответ 3

Только что решили. Всего два ф. дни брутфорса

Для меня секрет был в следующем:

  1. Я позвонил в POST/api/auth и увидел, что куки были успешно получены.

  2. Затем вызвав GET/api/users/с credentials: 'include' получите 401 unauth, поскольку с запросом не было отправлено куки.

Ключ должен установить credentials: 'include' для первого вызова /api/auth.

Ответ 4

Если вы читаете это в 2019 году, значением по умолчанию будет credentials: "same-origin".

fetch(url).then

Ответ 5

Просто добавьте правильные ответы здесь для пользователей .net webapi2.

Если вы используете cors, потому что ваш клиентский сайт обслуживается с другого адреса, как ваш webapi, то вам также необходимо включить SupportsCredentials=true в конфигурацию на стороне сервера.

        // Access-Control-Allow-Origin
        // https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
        var cors = new EnableCorsAttribute(Settings.CORSSites,"*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);