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
withCredentials
propiedad.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-Origin
encabezado de respuesta no esté configurado como comodín (*)Access-Control-Allow-Origin
no está configurado*
, significa que no haré una solicitud a ese servidor debido a CORS correctoAccess-Control-Allow-Origin
el valor del dominio desde el que desea realizar la solicitud XHR. por ejemplo,https://a.com
es el servidor,https://b.com
es el cliente yhttps://b.com
se carga en el navegador de alguien y se usaXMLHTTPRequest
para realizar una solicitudhttps://a.com
. Además deXMLHTTPRequest
(iniciado enhttps://a.com
) para configurarwithCredential: true
, el servidor -https://b.com
también debe configurarse para que el encabezado de respuesta contengaAccess-Control-Allow-Origin: https://a.com
TL; DR:
{ withCredentials: true }
oaxios.defaults.withCredentials = true
De la documentación de axios
withCredentials
indica 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
withCredentials
comotrue
enaxios.defaults
fuente
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-PINGOTHER
enAccess-Control-Allow-Headers
ha 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
withCredentials
bandera.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: true
a 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
withCredentials
propiedad 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
plugToRequest
exactamente? Pensé para acceder a las cookies en el servidor de nodo, ¿todo lo que se necesita es elcookie-parser
middleware (asumiendo Express)?Así que tuve exactamente el mismo problema y perdí alrededor de 6 horas de mi vida buscando, tuve el
withCredentials: true
Pero 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