From d8e03bbb5ca84d651e24edc27f76dd906513dcf3 Mon Sep 17 00:00:00 2001 From: Becem Date: Mon, 11 Mar 2024 12:28:50 +0100 Subject: [PATCH] fix(auth): avoid auto-logout when page not found (#79) * skip refresh logic if page not found * avoid infinite redirection loop when page not found --- src/runtime/middleware/auth.ts | 6 ++++++ src/runtime/plugins/auth.ts | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/runtime/middleware/auth.ts b/src/runtime/middleware/auth.ts index 09caf73..291cc9f 100644 --- a/src/runtime/middleware/auth.ts +++ b/src/runtime/middleware/auth.ts @@ -16,6 +16,12 @@ export default defineNuxtRouteMiddleware((to) => { return } + const isPageFound = to.matched.length > 0 + + if (!isPageFound && process.server) { + return + } + if (config.auth.enableGlobalAuthMiddleware === true) { if (to.meta.auth === false) { return diff --git a/src/runtime/plugins/auth.ts b/src/runtime/plugins/auth.ts index bc66f04..83c2826 100644 --- a/src/runtime/plugins/auth.ts +++ b/src/runtime/plugins/auth.ts @@ -8,13 +8,14 @@ import { addRouteMiddleware, useRuntimeConfig, useDirectusAuth, - useRoute, - useDirectusSession + useDirectusSession, + useRouter } from '#imports' export default defineNuxtPlugin(async (nuxtApp) => { try { const config = useRuntimeConfig().public.directus as PublicConfig & { auth: { enabled: true } } + const router = useRouter() addRouteMiddleware('common', common, { global: true }) addRouteMiddleware('auth', auth, { global: config.auth.enableGlobalAuthMiddleware }) @@ -23,9 +24,10 @@ export default defineNuxtPlugin(async (nuxtApp) => { const { _loggedInFlag } = useDirectusSession() const token = useDirectusToken() + const isPageFound = router.currentRoute.value?.matched.length > 0 const isPrerenderd = typeof nuxtApp.payload.prerenderedAt === 'number' const isServerRendered = nuxtApp.payload.serverRendered - const firstTime = (process.server && !isPrerenderd) || (process.client && (!isServerRendered || isPrerenderd)) + const firstTime = (process.server && !isPrerenderd && isPageFound) || (process.client && (!isServerRendered || isPrerenderd || !isPageFound)) if (firstTime) { const isCallback = useRoute().path === config.auth.redirect.callback