Tengo una API de nodo/express que creará una cookie HTTP y la pasará a mi aplicación React para la autenticación. La configuración se basó en el tutorial de cookies HTTP JWT de Ben Awad en Youtube si está familiarizado con él. Todo funciona muy bien cuando ejecuto el sitio web en mi servidor local (localhost: 4444). El problema con el que ahora me encuentro es que mi aplicación ahora usa subdominios para manejar espacios de trabajo (similar a cómo JIRA o Monday.com usan un subdominio para especificar un espacio de trabajo/equipo). Cada vez que ejecuto mi aplicación en un subdominio, las cookies HTTP dejan de funcionar.
He mirado muchos hilos sobre este problema y no puedo encontrar una solución, no importa lo que intente, la cookie no se guardará en mi navegador. Aquí están las cosas actuales que he intentado hasta ahora sin suerte:
. y sinNinguno de estos intentos ha hecho una diferencia, así que estoy un poco perdido sobre qué hacer en este momento. La única otra cosa que podría hacer es implementar mi aplicación en un servidor adecuado y simplemente ejecutar mi desarrollo a partir de eso, pero realmente no quiero hacer eso, creo que debería poder desarrollar desde mi máquina local.
Mi conocimiento de las cookies es un poco escaso, así que tal vez hay algo obvio que me estoy perdiendo.
Así es como se ve mi configuración en este momento:
En la API, tengo una ruta ( /refresh_token ) que creará una nueva cookie rápida así:
export const sendRefreshToken = (res: Response, token: string): void => { res.cookie('jid', token, { httpOnly: true, path: '/refresh_token', }); };Luego, en la interfaz, esencialmente ejecutará esta llamada en carga:
fetch('http://localhost:3000/refresh_token', { credentials: 'include', method: 'POST' }).then(async res => { const { accessToken } = await res.json() setState({ accessToken, workspaceId }) setLoading(false) })Parece súper simple de hacer, pero todo deja de funcionar cuando está en un subdominio. Estoy completamente perdido en este punto. Si tienes alguna idea, ¡sería genial!
si httpOnly es verdadero, no se podrá analizar a través del lado del cliente js. para trabajar con cookies en subdominios, configure el dominio como el dominio principal (xyz.com) y, por ejemplo, en BE:
res.cookie('refreshToken', refreshToken, { domain: authCookieDomain, path: '/', sameSite: 'None', secure: true, httpOnly: false, maxAge: cookieRefreshTokenMaxAgeMS });y en FE agregue withCredentials: true como opciones o credenciales de axios: incluya con fetch, y eso debería funcionar