diff --git a/pages/index.vue b/pages/index.vue index e9b67aa..89af26f 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -230,4 +230,12 @@ async function handleLogout() { await $fetch('/api/auth/logout', { method: 'POST' }) window.location.reload() } + +// Watch for authentication changes (e.g., if user is deleted) +watch(() => authData.value?.authenticated, (newAuth, oldAuth) => { + // If user was authenticated but now isn't (and it's not initial load) + if (oldAuth === true && newAuth === false) { + window.location.reload() + } +}) diff --git a/server/api/auth/verify.get.ts b/server/api/auth/verify.get.ts index d7ce217..6c75ac8 100644 --- a/server/api/auth/verify.get.ts +++ b/server/api/auth/verify.get.ts @@ -1,4 +1,4 @@ -import { getAuthCookie } from '~/server/utils/auth' +import { getAuthCookie, clearAuthCookie } from '~/server/utils/auth' import { getUserByUsername } from '~/server/utils/database' export default defineEventHandler(async (event) => { @@ -13,9 +13,18 @@ export default defineEventHandler(async (event) => { const user = getUserByUsername(username) + // If user doesn't exist (was deleted), clear the auth cookie + if (!user) { + clearAuthCookie(event) + return { + authenticated: false, + isAdmin: false + } + } + return { authenticated: true, - username: user?.username, - isAdmin: user?.is_admin === 1 + username: user.username, + isAdmin: user.is_admin === 1 } })