Tengo una versión provisional para mi sitio web que es beta.example.com . Recientemente agregué la autenticación de cookies con la siguiente configuración:
response.cookie(tokenName, token, { httpOnly: true, expires: new Date(Date.now() + (tokenExpirationSec * 1000)) })En la puesta en escena funciona la autenticación.
Cuando implementé el código en producción, la cookie se configuró correctamente (a través del encabezado Set-Cookie ) pero no se envió al servidor en las solicitudes del lado del servidor. Entonces, cuando actualice, el estado de inicio de sesión desaparecerá pero se conservará en las solicitudes del lado del cliente.
Vale la pena señalar que hay una redirección 301 de example.com a www.example.com . Además, el encabezado del host era www.example.com en producción.
Eventualmente resolví el problema agregando un parámetro de domain al configurar la cookie de la siguiente manera:
response.cookie(tokenName, token, { httpOnly: true, expires: new Date(Date.now() + (tokenExpirationSec * 1000)), domain: '.example.com' })Sin embargo, no entiendo completamente la fuente del problema. Según MDN
El dominio especifica los hosts permitidos para recibir la cookie. Si no se especifica, el valor predeterminado es el host de la ubicación actual del documento, sin incluir los subdominios. Si se especifica Dominio, los subdominios siempre se incluyen.
Entonces, cuando estaba en preparación con beta.example.com sin establecer explícitamente el domain , el domain implícito sería example.com de acuerdo con MDN y beta.example.com estaría excluido. ¡Pero la autenticación funcionó en la puesta en escena!
Pero tengo la misma situación en producción con www.example.com , ¿por qué no funciona en producción?
Esta es la configuración de nginx que hace la redirección:
server { listen 80 default_server; server_name beta.example.com; location / { include proxy_pass.inc; } } server { listen 80 default_server; server_name www.example.com; location / { include proxy_pass.inc; } } server { listen 80; server_name example.com; return 301 https://www.example.com$request_uri; }Creo que está malinterpretando la documentación de MDN .
Si no se especifica, el valor predeterminado es el host de la ubicación actual del documento, sin incluir los subdominios .
Lo que significa que si está en beta.example.com , el Domain se establecerá en el valor beta.example.com . Esto excluirá la cookie de otros subdominios.
Debe establecer explícitamente el Domain si desea utilizar la cookie en todos los subdominios.