2e272b321e
* reset() fix * fix(fe2): utm tracking on homepage route
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { activeUserQuery } from '~~/lib/auth/composables/activeUser'
|
|
import { usePostAuthRedirect } from '~~/lib/auth/composables/postAuthRedirect'
|
|
import { useApolloClientFromNuxt } from '~~/lib/common/composables/graphql'
|
|
import { convertThrowIntoFetchResult } from '~~/lib/common/helpers/graphql'
|
|
import { loginRoute } from '~~/lib/common/helpers/route'
|
|
|
|
/**
|
|
* Apply this to a page to prevent unauthenticated access
|
|
*/
|
|
export default defineNuxtRouteMiddleware(async (to) => {
|
|
const nuxt = useNuxtApp()
|
|
const client = useApolloClientFromNuxt()
|
|
const postAuthRedirect = usePostAuthRedirect({ route: to })
|
|
|
|
const isAccessCodeReq = !!to.query?.access_code
|
|
const isBasicHomepage = to.path === '/' && !Object.keys(to.query).length
|
|
const savePostAuthRedirect = !isAccessCodeReq && !isBasicHomepage
|
|
|
|
const { data } = await client
|
|
.query({
|
|
query: activeUserQuery
|
|
})
|
|
.catch(convertThrowIntoFetchResult)
|
|
|
|
// Redirect home, if not logged in
|
|
if (!data?.activeUser?.id) {
|
|
if (import.meta.server && nuxt.ssrContext?.event.node.req.method === 'OPTIONS') {
|
|
// quickfix hack to prevent redirect in OPTIONS
|
|
return
|
|
}
|
|
|
|
// Save current route for post-auth redirect and just go to login page
|
|
if (savePostAuthRedirect) {
|
|
postAuthRedirect.set(to.fullPath)
|
|
return navigateTo(loginRoute)
|
|
} else {
|
|
// Go to login page and forward all query params there too (this is probably the
|
|
// access code retrieval fetch request)
|
|
return navigateTo({ path: loginRoute, query: to.query })
|
|
}
|
|
}
|
|
})
|