From 79d3ba0f78634f1d4cec81909149c5b27a86e793 Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Sun, 1 Mar 2026 19:51:50 +0000 Subject: [PATCH] Allow authenticated members to bypass coming-soon page Add JWT-verified session check to coming-soon middleware so logged-in members can access the full site. Add member login link and modal to the coming-soon page so members can sign in before launch. --- app/middleware/coming-soon.global.js | 21 ++++++++++++++++++++- app/pages/coming-soon.vue | 11 ++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/middleware/coming-soon.global.js b/app/middleware/coming-soon.global.js index dc6c342..4a102b1 100644 --- a/app/middleware/coming-soon.global.js +++ b/app/middleware/coming-soon.global.js @@ -1,4 +1,4 @@ -export default defineNuxtRouteMiddleware((to, from) => { +export default defineNuxtRouteMiddleware(async (to, from) => { const config = useRuntimeConfig(); const isComingSoonMode = config.public.comingSoon === "true" || config.public.comingSoon === true; @@ -13,6 +13,25 @@ export default defineNuxtRouteMiddleware((to, from) => { return; } + // Allow authenticated users to bypass coming-soon + const authToken = useCookie("auth-token"); + if (authToken.value) { + // On the server, verify the JWT is actually valid + if (import.meta.server) { + try { + const { jwtSecret } = useRuntimeConfig(); + const jwt = await import("jsonwebtoken").then((m) => m.default); + jwt.verify(authToken.value, jwtSecret); + return; + } catch { + // Invalid/expired token — fall through to coming-soon redirect + } + } else { + // Client-side: trust the cookie (SSR already validated on initial load) + return; + } + } + // Redirect all other routes to coming-soon return navigateTo("/coming-soon"); }); diff --git a/app/pages/coming-soon.vue b/app/pages/coming-soon.vue index a52a3dc..26a5954 100644 --- a/app/pages/coming-soon.vue +++ b/app/pages/coming-soon.vue @@ -1,9 +1,16 @@ @@ -11,4 +18,6 @@ definePageMeta({ layout: "coming-soon", }); + +const { openLoginModal } = useLoginModal();