From d47b20326f96b6fff405fcc211719bf3068085ee Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Tue, 30 Sep 2025 14:44:08 +0200 Subject: [PATCH] fix: improve back button handling on auth pages --- .../src/lib/components/login-wrapper.svelte | 2 +- frontend/src/routes/authorize/+page.svelte | 2 +- frontend/src/routes/login/+page.svelte | 5 ++++- frontend/src/routes/login/+page.ts | 7 +++++++ .../login/alternative/code/+page.svelte | 20 +++++++++---------- 5 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 frontend/src/routes/login/+page.ts diff --git a/frontend/src/lib/components/login-wrapper.svelte b/frontend/src/lib/components/login-wrapper.svelte index 7997e246..315180cf 100644 --- a/frontend/src/lib/components/login-wrapper.svelte +++ b/frontend/src/lib/components/login-wrapper.svelte @@ -33,7 +33,7 @@ alternativeSignInButton.label = m.sign_in_with_login_code(); } - if (page.url.pathname == '/login') { + if (page.url.pathname != '/login') { alternativeSignInButton.href = `${alternativeSignInButton.href}?redirect=${encodeURIComponent(page.url.pathname + page.url.search)}`; } }); diff --git a/frontend/src/routes/authorize/+page.svelte b/frontend/src/routes/authorize/+page.svelte index a70d68ef..0867b817 100644 --- a/frontend/src/routes/authorize/+page.svelte +++ b/frontend/src/routes/authorize/+page.svelte @@ -179,7 +179,7 @@ {m.try_again()} {/if} - diff --git a/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte index 68133a13..f920286f 100644 --- a/frontend/src/routes/login/+page.svelte +++ b/frontend/src/routes/login/+page.svelte @@ -10,6 +10,9 @@ import { startAuthentication } from '@simplewebauthn/browser'; import { fade } from 'svelte/transition'; import LoginLogoErrorSuccessIndicator from './components/login-logo-error-success-indicator.svelte'; + + let { data } = $props(); + const webauthnService = new WebAuthnService(); let isLoading = $state(false); @@ -24,7 +27,7 @@ const user = await webauthnService.finishLogin(authResponse); await userStore.setUser(user); - goto('/settings'); + goto(data.redirect || '/settings'); } catch (e) { error = getWebauthnErrorMessage(e); } diff --git a/frontend/src/routes/login/+page.ts b/frontend/src/routes/login/+page.ts new file mode 100644 index 00000000..8ec2e0c0 --- /dev/null +++ b/frontend/src/routes/login/+page.ts @@ -0,0 +1,7 @@ +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ url }) => { + return { + redirect: url.searchParams.get('redirect') || '/settings' + }; +}; diff --git a/frontend/src/routes/login/alternative/code/+page.svelte b/frontend/src/routes/login/alternative/code/+page.svelte index 38a4277c..a9f861b9 100644 --- a/frontend/src/routes/login/alternative/code/+page.svelte +++ b/frontend/src/routes/login/alternative/code/+page.svelte @@ -1,12 +1,10 @@