es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Iron-session establece la duración máxima de la cookie

Estoy intentando configurar una aplicación de Next JS con iron-session y una función de ‘recordarme’, donde si el usuario marca la casilla de recordar en el formulario de inicio de sesión, entonces el maxAge de la cookie de iron-session se establece en una semana en lugar de mi valor predeterminado de 24 horas.

Sin embargo, no puedo encontrar una forma de establecer el valor programáticamente. He intentado lo siguiente pero obtengo ‘rememberMe no está definido’ en el operador ternario.

export default withIronSessionApiRoute(
async function loginRoute(req, res) {
const { username, password, rememberMe } = req.body;
await req.session.save();
return res.status(200).send(‘Conectado’);
},
{
cookieName: ‘DEMOAUTH’,
password: ‘PmsDH2Hm09rP7XRJkuo7TKDQXtowtBjurW66RUzU’,
ttl: rememberMe ? 60 * 60 * 24 * 7 : 60 * 60 * 24,
}
);

EDITAR después del comentario de Jesse – Modifiqué ligeramente agregando una constante rememberMe = true para verificar que el valor se establecía definitivamente y obtengo el mismo comportamiento

export default withIronSessionApiRoute(
async function loginRoute(req, res) {
const { username, password } = req.body;
const rememberMe = true;
await req.session.save();
return res.status(200).send(‘Conectado’);
},
{
cookieName: ‘DEMOAUTH’,
password: ‘PmsDH2Hm09rP7XRJkuo7TKDQXtowtBjurW66RUzU’,
ttl: rememberMe ? 60 * 60 * 24 * 7 : 60 * 60 * 24,
}
);

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la variable rememberMe no está definida correctamente. Una posible solución es definirla antes del objeto de configuración de iron-session y pasarla como argumento. Por ejemplo:

    export default withIronSessionApiRoute(
      async function loginRoute(req, res) {
        const { username, password, rememberMe } = req.body;
        await req.session.save();
        return res.status(200).send('Inicio de sesión exitoso');
      },
      {
        cookieName: 'DEMOAUTH',
        password: 'PmsDH2Hm09rP7XRJkuo7TKDQXtowtBjurW66RUzU',
        ttl: ({ rememberMe }) => rememberMe ? 60 * 60 * 24 * 7 : 60 * 60 * 24,
      }
    );
    

    De esta manera, rememberMe se pasa al objeto de configuración como argumento y se puede acceder a él como ({ rememberMe }). La propiedad ttl también se define como una función que devuelve la duración máxima adecuada en función del valor de rememberMe. Alternativamente, se puede definir un valor predeterminado para rememberMe en caso de que no se proporcione en el cuerpo de la solicitud. Por ejemplo:

    export default withIronSessionApiRoute(
      async function loginRoute(req, res) {
        const { username, password, rememberMe = false } = req.body;
        await req.session.save();
        return res.status(200).send('Inicio de sesión exitoso');
      },
      {
        cookieName: 'DEMOAUTH',
        password: 'PmsDH2Hm09rP7XRJkuo7TKDQXtowtBjurW66RUzU',
        ttl: rememberMe ? 60 * 60 * 24 * 7 : 60 * 60 * 24,
      }
    );
    

    En este caso, rememberMe se establece como false por defecto si no se proporciona en el cuerpo de la solicitud.

Comments are closed.