diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts index 3b77a84..76d29d4 100644 --- a/src/routes/login/+page.server.ts +++ b/src/routes/login/+page.server.ts @@ -1,5 +1,5 @@ import type { Actions } from "@sveltejs/kit"; -import type { PageServerLoad } from "./$types"; +import type { PageServerLoad } from "./$types"; import { fail, redirect } from "@sveltejs/kit"; import Logs from "$lib/server/log" @@ -7,22 +7,31 @@ import Logs from "$lib/server/log" import { authorize_password } from "$lib/server/auth"; import SessionStore from "$lib/server/session_store"; +function _get_redirect(url: URL) { + let redirect_url = url.searchParams.get("redirect"); + url.searchParams.delete("redirect") + + if (!redirect_url || !redirect_url.startsWith("/")) { + redirect_url = "/" + } + + return redirect_url + "?" + url.searchParams.toString() +} + export const load: PageServerLoad = ({ locals, url }) => { - let redirect_url = url.searchParams.get("redirect") ?? "/"; if (locals.user != null) { - redirect(302, redirect_url); + redirect(302, _get_redirect(url)); } } export const actions = { login: async ({ locals, request, cookies, url }) => { - - let redirect_url = url.searchParams.get("redirect") ?? "/"; + url.searchParams.delete("/login") if (locals.user != null) { - redirect(302, redirect_url); + redirect(302, _get_redirect(url)); } @@ -55,7 +64,7 @@ export const actions = { path: '/' }) - redirect(302, redirect_url); + redirect(302, _get_redirect(url)); }, logout: async ({ locals, cookies }) => { diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte index 42ad624..e609c0f 100644 --- a/src/routes/login/+page.svelte +++ b/src/routes/login/+page.svelte @@ -1,6 +1,7 @@