dh_demo

DreamHanks demo project
git clone git://git.lair.cx/dh_demo
Log | Files | Refs | README

logout.tsx (1147B)


      1 import { useTokenFlushTrigger } from '@/components/contexts/TokenContext'
      2 import { getAccessTokenCookieName, getRefreshTokenCookieName } from '@/lib/env'
      3 import { deleteSession } from '@/lib/security/session'
      4 import { authenticationFromCookies } from '@/lib/security/token'
      5 import { GetServerSideProps } from 'next'
      6 import { useRouter } from 'next/router'
      7 import { useEffect } from 'react'
      8 
      9 export const getServerSideProps: GetServerSideProps = async (context) => {
     10   const token = await authenticationFromCookies(context.req.cookies)
     11   if (token != null) {
     12     if (token.tid != null) {
     13       await deleteSession(token.tid)
     14     }
     15 
     16     context.res.setHeader('Set-Cookie', [
     17       `${getAccessTokenCookieName()}=; Path=/; HttpOnly; Expires=Thu, 01 Jan 1970 00:00:00 GMT`,
     18       `${getRefreshTokenCookieName()}=; Path=/; HttpOnly; Expires=Thu, 01 Jan 1970 00:00:00 GMT`,
     19     ])
     20   }
     21 
     22   return {
     23     props: {},
     24   }
     25 }
     26 
     27 export default function LogoutPage () {
     28   const flushToken = useTokenFlushTrigger()
     29   useEffect(() => {
     30     flushToken()
     31   }, [])
     32 
     33   const router = useRouter()
     34   useEffect(() => {
     35     router.push('/')
     36   })
     37 
     38   return (
     39     <></>
     40   )
     41 }