2016-01-01 22 views
87

Ich probiere die neue Fetch API aus, habe aber Probleme mit Cookies. Insbesondere gibt es nach einer erfolgreichen Anmeldung einen Cookie-Header in zukünftigen Anfragen, aber Fetch scheint diese Header zu ignorieren, und alle meine mit Fetch durchgeführten Anfragen sind nicht autorisiert.Fetch API mit Cookie

Liegt es daran, dass Fetch immer noch nicht bereit ist oder Fetch nicht mit Cookies funktioniert?

Ich baue meine App mit Webpack. Ich verwende auch Fetch in React Native, was nicht das gleiche Problem hat.

Antwort

139

Fetch verwendet standardmäßig kein Cookie. So aktivieren Sie Cookies, dies tun:

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

same-Herkunft funktioniert nicht mehr, include tut (siehe @ Jerry's Antwort): https://developers.google.com/web/updates/2015/03/introduction-to-fetch – jpic

+0

Wie Access-Cookie –

+2

@jpic: 'Include' funktioniert nur für Cross-Ursprung-Anfragen, aber nicht für Anfragen mit gleichem Ursprung. Offizielle Dokumente: https://github.com/github/fetch#sending-cookies – HoldOffHunger

79

Neben @ Khanetor Antwort für diejenigen, die mit Cross-Origin-Anfragen arbeiten: credentials: 'include'

Beispiel JSON Abrufanforderung:

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

Wie stellen Sie den Cookie ein? – pomo

+0

Der Cookie wird serverseitig gesetzt. In meinem Fall habe ich httponly Cookies verwendet. – Khanetor

+2

@Khanetor kann ich Cookies mithilfe von document.cookie per Javascript setzen und dann die Anfrage senden? – ospider