J'essaie la nouvelle API Fetch, mais j'ai des problèmes avec les cookies. Plus précisément, après une connexion réussie, il y a un en-tête de cookie dans les futures requêtes, mais Fetch semble ignorer cet en-tête et toutes mes requêtes effectuées avec Fetch ne sont pas autorisées.
Est-ce parce que Fetch n'est toujours pas prêt ou que Fetch ne fonctionne pas avec les cookies?
Je construis mon application avec Webpack. J'utilise aussi Fetch dans React Native, qui n'a pas le même problème.
Fetch n'utilise pas de cookie par défaut. Pour activer le cookie, procédez comme suit:
fetch(url, {
credentials: "same-Origin"
}).then(...).catch(...);
En plus de la réponse de @ Khanetor, pour ceux qui travaillent avec des requêtes d'origine croisée: credentials: 'include'
Exemple de demande de récupération 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
Je viens de résoudre. Juste deux f. jours de brutforce
Pour moi, le secret était de:
J'ai appelé POST/api/auth et je constate que les cookies ont bien été reçus.
Ensuite, appelez GET/api/users/avec credentials: 'include'
et obtenez 401 heures d'authentification, car aucun cookie n'a été envoyé avec la demande.
La clé doit définir credentials: 'include'
pour le premier appel/api/auth également.
Si vous lisez ceci en 2019, credentials: "same-Origin"
est la valeur par défaut.
fetch(url).then
Il suffit d’ajouter aux bonnes réponses ici pour les utilisateurs de .net
webapi2
.
Si vous utilisez cors
parce que votre site client est servi depuis une adresse différente de votre nom webapi
, vous devez également inclure SupportsCredentials=true
dans la configuration côté serveur.
// 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);