Files
speckle-server/packages/frontend-2/middleware/auth.ts
T
Kristaps Fabians Geikins 2e272b321e feat(fe2): fix mp.reset() usage to avoid too many distinct ids + utm tracking not working on homepage (#2851)
* reset() fix

* fix(fe2): utm tracking on homepage route
2024-09-03 10:49:27 +03:00

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 })
}
}
})