diff options
Diffstat (limited to 'apps/kit/src/routes/+layout.svelte')
| -rw-r--r-- | apps/kit/src/routes/+layout.svelte | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/kit/src/routes/+layout.svelte b/apps/kit/src/routes/+layout.svelte new file mode 100644 index 0000000..ee76da9 --- /dev/null +++ b/apps/kit/src/routes/+layout.svelte @@ -0,0 +1,23 @@ +<script lang="ts"> + import "../app.pcss"; + import {afterNavigate, beforeNavigate, goto} from "$app/navigation"; + import {is_active} from "$lib/session"; + import type {Navigation} from "@sveltejs/kit"; + + async function redirect_if_necessary(ticket: Navigation) { + const sessionIsValid = await is_active(); + const isPublicRoute = ticket.to?.routeId?.startsWith("(public)"); + if (sessionIsValid && isPublicRoute) { + await goto("/home"); + } else if (!sessionIsValid && !isPublicRoute) { + await goto("/login"); + } + } + + // This should probably be removed in favor of the logic in layout.server.ts. + // That requires a more sophisticated server side implementation of session handling, + // and i don't want that tbh, i want to stay as much in the browser as possible. + afterNavigate(redirect_if_necessary); + beforeNavigate(redirect_if_necessary); +</script> +<slot></slot>
\ No newline at end of file |
