2017-06-24 3 views
0

Lorsque je demande mon fichier comme dans l'exemple de code donné (import ES6) en utilisant chrome ou firefox, j'obtiens la requête correspondante côté serveur mais par opposition au "normal" chargement de script (par tag de script avec src) les cookies ne sont pas fournis dans l'en-tête, est-ce normal? Et si oui: Comment suis-je censé relier cette requête à une session si j'ai une authentification basée sur les cookies?Les cookies ne sont pas en en-tête quand le fichier est demandé par l'import

ne fonctionne pas - Parce que le navigateur n'envoie pas cookies mis en place à la demande:

<script type="module"> 
    import '/index.js'; 
</script> 

Works - Navigateur envoie cookie avec la demande:

<script src="/index.js"> 
</script> 

Répondre

2

Je pensais que ce moi-même:

Vous devez ajouter l'attribut "crossorigin" à la balise de script:

<script type="module" crossorigin> 
    import '/index.js'; 
</script> 

C'est parce que module ES6 import est en quelque sorte sous CORS même si la requête pour le script du module va à same-origin. Et CORS n'envoie pas d'informations d'identification pour les demandes de script de module. ... Sauf si vous mettez l'attribut crossorigin.

Cet article de Jack Archibald m'a beaucoup aidé (Les problèmes de navigateur mentionnés ne sont naturellement pas tout à fait à ce jour plus):

https://jakearchibald.com/2017/es-modules-in-browsers/

0

Vous pouvez mettre les cookies sur la fenêtre pour le rendre visible, sinon le navigateur envoie uniquement des en-têtes avec des requêtes. Quelque chose comme ...

const window.cookie = document.cookie;

+0

Je l'ai fait que vous proposiez et fait que les biscuits sont sur l'objet window avant la demande d'index.js est sorti. Mais la requête quand il est arrivé sur le serveur n'a pas encore le cookie de session dessus :( – jiron

+0

Utilisez-vous angulaire ou quelque chose du genre? – OneNeptune

+0

non, tout ce que j'ai sur le côté client est jquery et modles drapeau activé, serveur -j'ai un noeud.js – jiron