Estoy enviando solicitudes del cliente a mi servidor Express.js usando Axios.
Configuré una cookie en el cliente y quiero leer esa cookie de todas las solicitudes de Axios sin agregarlas manualmente para solicitarlas manualmente.
Este es mi ejemplo de solicitud del lado del cliente:
axios.get(`some api url`).then(response => ...
Intenté acceder a los encabezados o cookies utilizando estas propiedades en mi servidor Express.js:
req.headers
req.cookies
Ninguno de ellos contenía cookies. Estoy usando el middleware del analizador de cookies:
app.use(cookieParser())
¿Cómo hago para que Axios envíe cookies en solicitudes automáticamente?
Editar:
Configuré cookies en el cliente de esta manera:
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:'/'})
}
})
}
...
Si bien también utiliza Axios, no es relevante para la pregunta. Simplemente quiero incrustar cookies en todas mis solicitudes una vez que se establece una cookie.

Respuestas:
Tuve el mismo problema y lo solucioné usando la
withCredentialspropiedad.XMLHttpRequest de un dominio diferente no puede establecer valores de cookie para su propio dominio a menos que withCredentials esté establecido en true antes de realizar la solicitud.
fuente
Access-Control-Allow-Originencabezado de respuesta no esté configurado como comodín (*)Access-Control-Allow-Originno está configurado*, significa que no haré una solicitud a ese servidor debido a CORS correctoAccess-Control-Allow-Originel valor del dominio desde el que desea realizar la solicitud XHR. por ejemplo,https://a.comes el servidor,https://b.comes el cliente yhttps://b.comse carga en el navegador de alguien y se usaXMLHTTPRequestpara realizar una solicitudhttps://a.com. Además deXMLHTTPRequest(iniciado enhttps://a.com) para configurarwithCredential: true, el servidor -https://b.comtambién debe configurarse para que el encabezado de respuesta contengaAccess-Control-Allow-Origin: https://a.comTL; DR:
{ withCredentials: true }oaxios.defaults.withCredentials = trueDe la documentación de axios
withCredentialsindica si las solicitudes de control de acceso entre sitios deben realizarse con credencialesSi pasa
{ withCredentials: true }con su solicitud, debería funcionar.Una mejor manera sería establecer
withCredentialscomotrueenaxios.defaultsfuente
No estoy familiarizado con Axios, pero hasta donde sé, en javascript y ajax hay una opción
Esto enviará automáticamente la cookie al lado del cliente. Como ejemplo, este escenario también se genera con passportjs, que establece una cookie en el servidor.
fuente
También es importante establecer los encabezados necesarios en la respuesta rápida. Estos son los que me funcionaron:
fuente
X-PINGOTHERenAccess-Control-Allow-Headersha sido obligatoria para mí (Node.js 6,9 con 4,16 expreso, Chrome 63). Consulte la publicación de JakeElder sobre este problema de GitHub: github.com/axios/axios/issues/191#issuecomment-311069164Otra solución es usar esta biblioteca:
https://github.com/3846masa/axios-cookiejar-support
que integra el soporte "Tough Cookie" en Axios. Tenga en cuenta que este enfoque aún requiere la
withCredentialsbandera.fuente
para las personas que aún no pueden resolverlo, esta respuesta me ayudó. respuesta de stackoverflow: 34558264
TLDR; es necesario configurar
{withCredentials: true}tanto la solicitud GET como la solicitud POST (obtener la cookie) para ambos axios y fetch.fuente
{ withCredentials: true }solicitud GET no tuvo ningún efecto.withCredentials: truea la configuración de la solicitud, pero no este detalle. Pasé casi 2 días tratando de resolver el problema hasta que me encontré con estoconjunto
axios.defaults.withCredentials = true;o para alguna solicitud específica puedes usar
axios.get(url,{withCredentials:true})por ejemplo: si su interfaz que realiza la solicitud se ejecuta en localhost: 3000, establezca el encabezado de respuesta como
también establece
fuente
Puede utilizar la
withCredentialspropiedad para pasar cookies en la solicitud.Al configurar
{ withCredentials: true }, puede encontrar un problema de origen cruzado. Para resolver eso necesitas usarAquí puede leer sobre con Credenciales
fuente
Estás mezclando las dos ideas.
Tienes "react-cookie" y "axios"
react-cookie => es para manejar la cookie en el lado del cliente
axios => es para enviar solicitudes ajax al servidor
Con esa información, si desea que las cookies del lado del cliente también se comuniquen en el lado del backend, deberá conectarlas.
Nota del archivo Léame "react-cookie":
enlace al archivo Léame
Si esto es lo que necesitas, genial.
Si no es así, comente para que pueda dar más detalles.
fuente
plugToRequestexactamente? Pensé para acceder a las cookies en el servidor de nodo, ¿todo lo que se necesita es elcookie-parsermiddleware (asumiendo Express)?Así que tuve exactamente el mismo problema y perdí alrededor de 6 horas de mi vida buscando, tuve el
withCredentials: truePero el navegador aún no guardó la cookie hasta que, por alguna extraña razón, tuve la idea de cambiar la configuración:
Parece que siempre debe enviar primero la clave 'withCredentials'.
fuente