9dc902835c
Related to https://github.com/vercel/next.js/issues/11014 The authentication method has been replaced with an improved version of the passport example.
51 lines
1 KiB
JavaScript
51 lines
1 KiB
JavaScript
import { useEffect } from 'react'
|
|
import { useRouter } from 'next/router'
|
|
import Link from 'next/link'
|
|
import gql from 'graphql-tag'
|
|
import { useQuery } from '@apollo/react-hooks'
|
|
|
|
const ViewerQuery = gql`
|
|
query ViewerQuery {
|
|
viewer {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
`
|
|
|
|
const Index = () => {
|
|
const router = useRouter()
|
|
const { data, loading, error } = useQuery(ViewerQuery)
|
|
const viewer = data?.viewer
|
|
const shouldRedirect = !(loading || error || viewer)
|
|
|
|
useEffect(() => {
|
|
if (shouldRedirect) {
|
|
router.push('/signin')
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [shouldRedirect])
|
|
|
|
if (error) {
|
|
return <p>{error.message}</p>
|
|
}
|
|
|
|
if (viewer) {
|
|
return (
|
|
<div>
|
|
You're signed in as {viewer.email} goto{' '}
|
|
<Link href="/about">
|
|
<a>about</a>
|
|
</Link>{' '}
|
|
page. or{' '}
|
|
<Link href="/signout">
|
|
<a>signout</a>
|
|
</Link>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return <p>Loading...</p>
|
|
}
|
|
|
|
export default Index
|