web-dev-qa-db-fra.com

Récupérer l'API avec Cookie

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.

161
Khanetor

Fetch n'utilise pas de cookie par défaut. Pour activer le cookie, procédez comme suit:

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

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

147
zurfyx

Je viens de résoudre. Juste deux f. jours de brutforce

Pour moi, le secret était de:

  1. J'ai appelé POST/api/auth et je constate que les cookies ont bien été reçus.

  2. 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.

23
user1671599

Si vous lisez ceci en 2019, credentials: "same-Origin" est la valeur par défaut.

fetch(url).then
5
alextrastero

Il suffit d’ajouter aux bonnes réponses ici pour les utilisateurs de .netwebapi2.

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);
0
Mark Dornian