Error al establecer sameSite de strict o lax a none – cookie con solo HTTP – ExpressJS
Estoy trabajando en un proyecto de la pila MERN. El backend se ejecuta en el puerto 5000 y el frontend se ejecuta en el puerto 3000.
Después de haber generado la versión de producción, he enviado el archivo del servidor a Heroku y el archivo del cliente a Netlify. Por lo tanto, tuve que cambiar sameSite de strict a none, y el problema apareció tanto en el entorno de desarrollo como en el entorno de producción.
Aquí está mi código para crear una cookie:
validateLogin(req, res, next){
user.find({username : req.body.username})
.then(async (user) => {
const valid = await bcrypt.compare(req.body.password, user[0].password);
if (valid)
res.cookie('token',"Hello",{
httpOnly:true,
maxAge:3600000*5,
sameSite:'none',
secure:true,
}).status(200).send("Inicio de sesión exitoso");
res.status(403).send({status: false, message: `Contraseña incorrecta`});
})
.catch(() => {res.status(400).send({status : false,message : `No se puede validar el inicio de sesión`})});
}
Al principio, como he mencionado, la cookie funcionaba sin problemas cuando sameSite:'strict'
o sameSite:'lax'
en el entorno de desarrollo. Pero tuve que cambiarlo por motivos de producción.
El código de estado 400 se devuelve cuando intento validar el inicio de sesión. Cuando sameSite != none
, devuelve con el código de estado 200 y recibe el mensaje “Inicio de sesión exitoso”, pero no se agrega ninguna cookie.
davy.ai
Como experto en IT especializado en node.js, reactjs, express, cookies y cookie-httponly, puedo ofrecer una idea sobre el problema que estás enfrentando.
Como mencionaste, estás ejecutando un proyecto MERN stack, con el backend ejecutándose en el puerto 5000 y el frontend ejecutándose en el puerto 3000. Después de compilar para producción, subiste el archivo del servidor a Heroku y el archivo del cliente a Netlify. Esto requirió que cambiaras el atributo sameSite de strict a none.
Tu código para crear una cookie es el siguiente:
Inicialmente, la cookie funcionaba correctamente cuando el atributo
sameSite
estaba configurado enstrict
olax
en el entorno de desarrollo. Sin embargo, al cambiarlo anone
para fines de producción, se produjo un problema en el que el código de estado 400 se devolvía al validar el inicio de sesión. Cuando el atributosameSite
no se establecía ennone
, se devolvía el código de estado 200 pero no se agregaba ninguna cookie.Según la información proporcionada, parece que el problema puede estar relacionado con el atributo
secure
. Cuando se establece entrue
, la cookie solo se enviará a través de HTTPS. Es posible que esto esté causando problemas con la configuración adecuada de la cookie.Para solucionar este problema, puedes intentar establecer el atributo
secure
enfalse
y ver si la cookie se configura correctamente. Además, puedes intentar usar una herramienta de gestión de cookies (como EditThisCookie para Chrome) para verificar si la cookie se está configurando correctamente y para ver sus atributos.Además, debes asegurarte de que tu backend y frontend estén correctamente configurados para manejar las cookies con el valor
none
para el atributosameSite
. Esto puede implicar configurar encabezados CORS en el backend y actualizar el código del lado del cliente para manejar los cambios.En resumen, el problema que enfrentas con la configuración incorrecta de la cookie puede estar relacionado con el atributo
secure
u otros problemas de configuración en tu backend y frontend. Al solucionar estos aspectos y asegurarte de que las configuraciones sean correctas, deberías poder resolver el problema y configurar la cookie correctamente con el valornone
para el atributosameSite
.