Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

419
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!