From fe7d89d1b15985bdefb5bddd86919c13c1e9a6b4 Mon Sep 17 00:00:00 2001 From: Simula_r <18093452+simula-r@users.noreply.github.com> Date: Wed, 28 Jan 2026 18:33:44 -0800 Subject: [PATCH] =?UTF-8?q?fix:=20move=20WorkspaceAuthGate=20to=20LayoutDe?= =?UTF-8?q?fault=20for=20proper=20re-login=20hand=E2=80=A6=20(#8381)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Move WorkspaceAuthGate from App.vue to LayoutDefault.vue so it only wraps authenticated routes - Change initialize() to run in onMounted() for proper Vue lifecycle - Restore immediate: true in cloudRemoteConfig watcher as backup - Gate now mounts fresh after login, fixing re-login feature flag issue The root cause was a race condition: after logout + page reload, the cloudRemoteConfig watcher could be set up after the user already logged in, missing the isLoggedIn change and never calling /features endpoint. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8381-fix-move-WorkspaceAuthGate-to-LayoutDefault-for-proper-re-login-hand-2f66d73d36508182a3dec09a49214a00) by [Unito](https://www.unito.io) Co-authored-by: Claude Opus 4.5 --- src/App.vue | 17 +++++++---------- src/components/auth/WorkspaceAuthGate.vue | 11 +++++++---- src/extensions/core/cloudRemoteConfig.ts | 7 ++++--- src/views/layouts/LayoutDefault.vue | 10 +++++++--- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/App.vue b/src/App.vue index b5e17500f..7c11c4c7b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,13 +1,11 @@ diff --git a/src/extensions/core/cloudRemoteConfig.ts b/src/extensions/core/cloudRemoteConfig.ts index d3c1dc7ac..8db19df9c 100644 --- a/src/extensions/core/cloudRemoteConfig.ts +++ b/src/extensions/core/cloudRemoteConfig.ts @@ -16,15 +16,16 @@ useExtensionService().registerExtension({ const { isLoggedIn } = useCurrentUser() const { isActiveSubscription } = useSubscription() - // Refresh config when subscription status changes - // Initial auth-aware refresh happens in WorkspaceAuthGate before app renders + // Refresh config when auth or subscription status changes + // Primary auth refresh is handled by WorkspaceAuthGate on mount + // This watcher handles subscription changes and acts as a backup for auth watchDebounced( [isLoggedIn, isActiveSubscription], () => { if (!isLoggedIn.value) return void refreshRemoteConfig() }, - { debounce: 256 } + { debounce: 256, immediate: true } ) // Poll for config updates every 10 minutes (with auth) diff --git a/src/views/layouts/LayoutDefault.vue b/src/views/layouts/LayoutDefault.vue index cbe0e3408..613aa0418 100644 --- a/src/views/layouts/LayoutDefault.vue +++ b/src/views/layouts/LayoutDefault.vue @@ -1,11 +1,15 @@