Files
veridian/app/middleware/auth.global.ts

30 lines
1.0 KiB
TypeScript

export default defineNuxtRouteMiddleware(async (to) => {
const { session: rawSession, fetchSession } = useAuth();
let session = rawSession.value;
const isAuthPage = to.path.toLowerCase().includes("/auth/");
// Only fetch session if not on auth pages (prevents race condition after logout)
if (!rawSession.value && !isAuthPage) {
const result = await fetchSession();
if (result.ok) {
session = result.data.session;
} else {
console.error("Failed to fetch session:", result.error);
session = null;
}
}
const loggedIn = computed(() => !!session);
// if authenticated, and on a signin/signup page, redirect to home page
if (isAuthPage && loggedIn.value) {
return await navigateTo((to.query.to as string) ?? "/");
}
// If not authenticated, and not on a signin/signup page, redirect to login page
if (!loggedIn.value && !isAuthPage) {
return await navigateTo(`/auth/login?to=${to.path}`);
}
});