import { DEFAULT_AUTHENTICATED_LANDING_PATH, isGuestOnlyRoute, isPublicRoute, normalizeSafeRedirect, } from "../utils/auth-routes"; import { useAuthSession } from "../composables/useAuthSession"; export default defineNuxtRouteMiddleware(async (to) => { if(to.path.startsWith("/__nuxt_error")) { return } if(to.path.startsWith("/api")) { return } if(to.path.startsWith("/public")) { return } const { initialized, loggedIn, refresh } = useAuthSession(); if (!initialized.value) { await refresh(); } const currentPath = to.path; const currentFullPath = to.fullPath; const isLoggedIn = loggedIn.value; if (!isLoggedIn && !isPublicRoute(currentPath)) { return navigateTo({ path: "/login", query: { redirect: currentFullPath }, }); } if (isLoggedIn && isGuestOnlyRoute(currentPath)) { const redirectCandidate = Array.isArray(to.query.redirect) ? to.query.redirect[0] : to.query.redirect; const redirectTarget = normalizeSafeRedirect( redirectCandidate, DEFAULT_AUTHENTICATED_LANDING_PATH, ); if (redirectTarget !== currentFullPath && redirectTarget !== currentPath) { return navigateTo(redirectTarget); } return navigateTo(DEFAULT_AUTHENTICATED_LANDING_PATH); } });