2016-01-01 11 views
87

Sto provando la nuova API di recupero ma ho problemi con i cookie. Specificamente, dopo un login riuscito, c'è un'intestazione di cookie nelle richieste future, ma Fetch sembra ignorare quelle intestazioni e tutte le mie richieste fatte con Fetch non sono autorizzate.API di recupero con cookie

È perché Fetch non è ancora pronto o Fetch non funziona con i cookie?

Costruisco la mia app con Webpack. Uso anche Fetch in React Native, che non ha lo stesso problema.

risposta

139

Fetch non utilizza i cookie per impostazione predefinita. Per abilitare biscotto, fare questo:

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

stessa origine non funziona più, include fa (vedi @ risposta di Jerry): https://developers.google.com/web/updates/2015/03/introduction-to-fetch – jpic

+0

Come cookie di accessione –

+2

@jpic: "include" funziona solo per le richieste di origine incrociata, ma non per le richieste di origine identica. Documenti ufficiali: https://github.com/github/fetch#sending-cookies – HoldOffHunger

79

Oltre a @ risposta di Khanetor, per coloro che stanno lavorando con le richieste cross-origine: credentials: 'include'

Esempio JSON recuperare richiesta:

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

come si imposta il cookie? – pomo

+0

Il cookie viene impostato dal lato server. Nel mio caso stavo usando i cookie httponly. – Khanetor

+2

@Khanetor posso impostare i cookie utilizzando document.cookie da javascript e quindi inviare la richiesta? – ospider

Problemi correlati