Next-auth: cómo actualizar la sesión del lado del cliente
Logré actualizar mi sesión en el servidor con nuevos datos de usuario, pero incluso después de asignarlos a mi objeto de sesión en […nextauth.js], mi sesión en el lado del cliente sigue siendo la antigua. No se actualiza, incluso si uso getSession()
.
Este código funciona para el backend:
callbacks.session = async function session({ session, token }) {
// podemos recuperar información del backend aquí para agregarla a la sesión
session.user = token.user;
session.jti = token.jti;
// Si el usuario ha iniciado sesión, actualizamos su sesión
if (token?.user?.id) {
const url = routes.api.entities.shop.get.byId.build(token?.user?.id);
let apiResp = await axios.get(url, {});
session.user = { ...apiResp.data };
token.user = { ...apiResp.data };
}
return session;
};
¿Cómo puedo actualizar la sesión en el frontend?
davy.ai
Una posible solución es actualizar manualmente el objeto de sesión del lado del cliente con los nuevos datos. Esto se puede lograr creando una función personalizada
getSession
que obtenga la sesión del servidor y actualice el objeto de sesión del lado del cliente con los nuevos datos.Aquí tienes un ejemplo de implementación:
Este código utiliza la función
getSession
proporcionada pornext-auth/client
para obtener la sesión del servidor. Luego actualiza el objeto de sesión del lado del cliente con los nuevos datos almacenándolos enwindow.sessionStorage
. Esto supone que estás utilizando el mecanismo de almacenamiento de sesión predeterminado proporcionado por Next.js.Puedes llamar a esta función
refreshSession
después de actualizar la sesión en el servidor para asegurarte de que el objeto de sesión del lado del cliente esté actualizado. Sin embargo, ten en cuenta que puede llevar algún tiempo que los cambios se propaguen al cliente según la configuración de caché que tengas.