diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d99223f..e7cdcf8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -22,8 +22,12 @@ import PermissionDeniedView from '@/components/PermissionDeniedView.vue' const store = useAuthStore() onMounted(async () => { - // Detect restricted mode: any path not starting with /auth/ - if (!location.pathname.startsWith('/auth/')) { + // Detect restricted mode: + // We only allow full functionality on the exact /auth/ (or /auth) path. + // Any other path (including /, /foo, /auth/admin, etc.) is treated as restricted + // so the app will only show login or permission denied views. + const path = location.pathname + if (!(path === '/auth/' || path === '/auth')) { store.setRestrictedMode(true) } // Load branding / settings first (non-blocking for auth flow) diff --git a/frontend/src/components/LoginView.vue b/frontend/src/components/LoginView.vue index 1bbf848..5579b8c 100644 --- a/frontend/src/components/LoginView.vue +++ b/frontend/src/components/LoginView.vue @@ -27,9 +27,9 @@ const handleLogin = async () => { await authStore.authenticate() authStore.showMessage('Authentication successful!', 'success', 2000) if (authStore.restrictedMode) { - // In restricted mode after successful auth show permission denied (no profile outside /auth/) - authStore.currentView = 'permission-denied' - } else if (location.pathname.startsWith('/auth/')) { + // Restricted mode: reload so the app re-mounts and selectView() applies (will become permission denied) + location.reload() + } else if (location.pathname === '/auth/') { authStore.currentView = 'profile' } else { location.reload() diff --git a/frontend/src/components/PermissionDeniedView.vue b/frontend/src/components/PermissionDeniedView.vue index a68bbce..ba5764c 100644 --- a/frontend/src/components/PermissionDeniedView.vue +++ b/frontend/src/components/PermissionDeniedView.vue @@ -32,7 +32,6 @@ function back() { } async function logout() { await authStore.logout() - authStore.currentView = 'login' }