Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

415
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda