Ответ 1
Fetch не использует cookie по умолчанию. Чтобы включить cookie, сделайте следующее:
fetch(url, {
credentials: "same-origin"
}).then(...).catch(...);
Я тестирую новый API Fetch, но у меня проблемы с Cookies. В частности, после успешного входа в систему, в будущих запросах есть заголовок Cookie, но Fetch, похоже, игнорирует эти заголовки, и все мои запросы, сделанные с помощью Fetch, являются несанкционированными.
Это потому, что Fetch еще не готов или Fetch не работает с Cookies?
Я создаю свое приложение с помощью Webpack. Я также использую Fetch in React Native, который не имеет такой же проблемы.
Fetch не использует cookie по умолчанию. Чтобы включить cookie, сделайте следующее:
fetch(url, {
credentials: "same-origin"
}).then(...).catch(...);
В дополнение к ответу @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
Только что решили. Всего два ф. дни брутфорса
Для меня секрет был в следующем:
Я позвонил в POST/api/auth и увидел, что куки были успешно получены.
Затем вызвав GET/api/users/с credentials: 'include'
получите 401 unauth, поскольку с запросом не было отправлено куки.
Ключ должен установить credentials: 'include'
для первого вызова /api/auth.
Если вы читаете это в 2019 году, значением по умолчанию будет credentials: "same-origin"
.
fetch(url).then
Просто добавьте правильные ответы здесь для пользователей .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);