Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

416
Vistas
Cierre de sesión de autenticación siguiente dentro de la devolución de llamada jwt

Si un usuario inicia sesión en la aplicación entre las actualizaciones de la aplicación, quiero cerrar la sesión del usuario la próxima vez que visite.

Extraigo la versión del package.json y la almaceno en jwt/session para comparar la versión desde la que se autenticó el usuario y la versión que se está ejecutando ahora.

 // pages/api/auth/[nextauth].ts const version = require('../../../package.json').version import NextAuth from 'next-auth' import { signOut } from 'next-auth/react' export default NextAuth({ providers: [ /*...*/ ], session: { strategy: 'jwt' }, callbacks: { async jwt(props) { const { token, user, account } = props const isSignIn = user?.username ? true :false if(isSignIn) { token.version = version // ... } if (token?.version !== version) { await signOut() return {} } return token }, // ... } })

Esto funciona, pero está arrojando un error.

 https://next-auth.js.org/errors#jwt_session_error window is not defined { message: 'window is not defined', stack: ... name: 'ReferenceError }

Sé que se está generando el error porque estoy llamando a la función signOut en el lado del servidor cuando se supone que es una función del lado del navegador, por lo tanto, el error para la window no está definido.

¿De qué otra manera puedo llamar a la función signOut sin que intente usar la llamada lateral del navegador, incluida la referencia a la window ?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puede usar el cierre de sesión en el lado del servidor por lo que reuní, pero aquí hay un truco que usé en mi caso. En su lugar, intentar cerrar sesión desde el lado del servidor devuelve un código de error.

 const version = require('../../../package.json').version import NextAuth from 'next-auth' import { signOut } from 'next-auth/react' export default NextAuth({ providers: [ /*...*/ ], session: { strategy: 'jwt' }, callbacks: { async jwt(props) { const { token, user, account } = props const isSignIn = user?.username ? true :false if(isSignIn) { token.version = version // ... } if (token?.version !== version) { return { // You can ignore this if you don't need the previous data ...token, // Return an error code error: "invalid-version", } } return token }, // ... } })

Cree un contenedor alrededor de las rutas seguras. también puede hacer esto en un diseño común.

 export const Auth = ({children}) => { const { data: sessionData } = useSession(); const router = useRouter(); useEffect(() => { // check if the error has occurred if (sessionData?.user.error === "invalid-version") { // Sign out here signOut(); } }, [sessionData?.user.error, router]); return ( <>{children}</> ) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda