Cuando la fecha de caducidad es inferior a la hora o fecha actual, quiero que se cierre la sesión automáticamente. Sin embargo, parece que después de ingresar la fecha de vencimiento, debo actualizar antes de que se desconecte, y el peor de los casos es que haya pasado más de una hora, que es mi fecha de vencimiento típica ingresada, y cuando trato de agregar algo entrada, como tal vez agregar publicaciones, me alerta que el usuario debe iniciar sesión, lo que sé poner esa alerta si el usuario ya no ha iniciado sesión si el token ha caducado. ¿Hay alguna forma de resolver el problema o problema que tengo ahora mismo? Sé que la hay, pero mi falta de experiencia no me ayuda a encontrar más soluciones.
const initialState = { user: null, }; if (typeof window !== "undefined") { if (localStorage.getItem("jwtToken")) { const decodedToken = jwtDecode(localStorage.getItem("jwtToken")); if (decodedToken.exp * 1000 < Date.now()) { localStorage.removeItem("jwtToken"); window.location.href = "/login"; } else { initialState.user = decodedToken; } } }
Y en mi backend, simplemente ingresé 5000 milisegundos o 5 segundos para ver si mi aplicación se estaba ejecutando, y el token jwt se guarda en localStorage cada vez que inicio sesión. Este código funciona, pero deberá volver a cargar la página antes de que el método de cierre de sesión surta efecto.
Gracias por su ayuda, y por favor deje cualquier pregunta en la sección de comentarios a continuación.
Encontré una manera, pero no creo que sea una buena práctica, este es el código que hice:
function login(userData) { localStorage.setItem("jwtToken", userData.token); const decodedToken = jwtDecode(userData.token); dispatch({ type: "LOGIN", payload: userData, }); setTimeout(() => { localStorage.removeItem("initialTime"); logout(); router.push("/login"); toast.error("Session expired", shortToastConfig); }, decodedToken.exp * 1000 - Date.now()); }
Se cerrará automáticamente porque la fecha de caducidad es 1 hora después de que inicie sesión, y puede ajustar mi código si no es tan eficiente o la mejor práctica. Otro problema es que cuando actualizo la página en el medio antes de que caduque el token, no se cierra la sesión automáticamente, lo que implica que la capacidad de establecer el tiempo de espera no funciona, ¿quizás después de que se haya realizado la actualización?
Gracias por su ayuda y deje un comentario si necesita más código para probar esto.