import { useAuth0 } from "@auth0/auth0-vue"; import { watch } from "vue"; import { abortNavigation, defineNuxtRouteMiddleware } from "nuxt/app"; const waitUntilLoaded = async (isLoading: { value: boolean }) => { if (!isLoading.value) { return; } await new Promise((resolve) => { const stop = watch( () => isLoading.value, (value) => { if (!value) { stop(); resolve(); } } ); }); }; export default defineNuxtRouteMiddleware(async (to) => { if (process.server) { return; } if (to.path.startsWith("/auth/callback")) { return; } const auth0 = useAuth0(); await waitUntilLoaded(auth0.isLoading); if (auth0.isAuthenticated.value) { return; } await auth0.loginWithRedirect({ appState: { target: to.fullPath }, }); return abortNavigation(); });