Faire Axios envoyer des "cookies" dans ses demandes automatiquement
Je suis d'envoyer des demandes de la part du client à mon Express.js serveur à l'aide de Axios.
J'ai installer un cookie sur le client et je veux lire que les cookies de tous les Axios demandes sans les ajouter manuellement à la demande de la main.
C'est mon côté client demande exemple:
axios.get(`some api url`).then(response => ...
J'ai essayé d'accéder à des en-têtes ou les cookies à l'aide de ces propriétés dans mon Express.js serveur:
req.headers
req.cookies
Aucun d'entre eux contiennent des cookies. Je suis à l'aide de cookie analyseur middleware:
app.use(cookieParser())
Comment puis-je faire Axios envoyer des cookies automatiquement les demandes?
Edit:
J'ai mis cookie sur le client comme ceci:
import cookieClient from 'react-cookie'
...
let cookie = cookieClient.load('cookie-name')
if(cookie === undefined){
axios.get('path/to/my/cookie/api').then(response => {
if(response.status == 200){
cookieClient.save('cookie-name', response.data, {path:'/'})
}
})
}
...
Alors qu'il est aussi à l'aide d'Axios, il n'est pas pertinent pour la question. Je veux simplement intégrer les cookies dans toutes mes demandes une fois qu'un cookie est créé.
- comment avez-vous mis le cookie sur le client? montrer l'exemple de code s'il vous plaît 🙂
- Ajouté le code en question
- Les Cookies sont définis par les serveurs avec un Set-Cookie non par le client, je suppose que tu veux dire lire le cookie sur le client. Selon le Témoin protocole, le client doit inclure un en-tête de Cookie dans sa demande à l'émetteur d'un cookie serveur.
- Regarde ce stackoverflow.com/questions/53898031/...
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et il fixe par withCredential propriété.
XMLHttpRequest partir d'un domaine différent ne peut pas définir les valeurs des cookies pour leur propre domaine, à moins que withCredentials est défini à true, avant de faire la demande.
Access-Control-Allow-Origin
en-tête de réponse n'est pas le caractère générique (*)Access-Control-Allow-Origin
n'est pas le*
cela signifie, je ne vais pas faire de demande à ce serveur à cause de la SCRO droitAccess-Control-Allow-Origin
's de la valeur pour le nom de domaine que vous voulez faire XHR demande de. par exemple,https://a.com
est le serveur,https://b.com
est le client, ethttps://b.com
est chargé dans un navigateur et est à l'aide deXMLHTTPRequest
à faire une demande pourhttps://a.com
. En outre, pour laXMLHTTPRequest
(lancé enhttps://a.com
) pour définirwithCredential: true
, le serveurhttps://b.com
doit également être configuré de sorte que la réaction de l'en-tête contientAccess-Control-Allow-Origin: https://a.com
https://b.com
dans votre exemple, représente le client, doncXMLHTTPRequest
devrait être lancé enb
au lieu dea
?Je ne suis pas familier avec Axios, mais pour autant que je sais de javascript et ajax il y a une option
Cela va automatiquement envoyer le cookie pour le côté client. Comme un exemple, ce scénario est également généré avec passportjs, qui définit un cookie sur le serveur
Il est également important de les en-têtes de la réponse expresse. Ce sont ceux qui ont travaillé pour moi:
X-PINGOTHER
enAccess-Control-Allow-Headers
a été obligatoire pour moi (Node.js 6.9 avec Express 4.16, Chrome 63). Vérifier JakeElder's post sur ce GitHub question: github.com/axios/axios/issues/191#issuecomment-311069164De l'axios documentation
withCredentials
indique si oui ou non le cross-site de Contrôle d'Accès les demandes doivent être faites à l'aide des informations d'identificationSi vous passez
{ withCredentials: true }
avec votre demande, il devrait fonctionner.Une meilleure façon serait de réglage
withCredentials
commetrue
dansaxios.defaults
Une autre solution est d'utiliser cette bibliothèque:
https://github.com/3846masa/axios-cookiejar-support
qui intègre "Tough Cookie" soutien à Axios. Notez que cette approche exige toujours le
withCredentials
drapeau.Vous êtes l'obtention des deux pense mixte.
Vous avez "réagissent-cookie" et "axios"
réagir-cookie => est pour la manutention, le cookie sur le côté client
axios => est pour l'envoi d'une requête ajax vers le serveur
Avec cette info, si vous voulez les cookies du côté client pour être communiquées dans le backend côté, vous aurez besoin de les connecter entre eux.
Note de "réagir-cookie" Readme:
lien vers readme
Si c'est ce que vous avez besoin, grande.
Si non, s'il vous plaît commentaire afin que je puisse donner plus de détails.
plugToRequest
exactement faire? J'ai pensé à accéder à des cookies sur le nœud de serveur, tout ce qu'on besoins est lacookie-parser
middleware (en supposant Express)?ensemble
axios.defaults.withCredentials = true;
ou pour une demande spécifique, vous pouvez utiliser
axios.get(url,{withCredentials:true})
pour ex: si votre front-end, ce qui rend la demande s'exécute sur localhost:3000 , puis définissez l'en-tête de réponse que
également définir
pour les personnes toujours pas en mesure de le résoudre, cette réponse m'a aidé.
stackoverflow réponse: 34558264
TLDR;
on a besoin de définir
{withCredentials: true}
dans les deux demande d'OBTENIR ainsi la requête POST (récupérer le cookie) pour les deux axios et les récupérer.