From 9b776409779696c14c05e03b506972fecdeb9b1b Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Sun, 31 Aug 2025 21:58:55 +0200 Subject: [PATCH] Implement better auth flow with direct Authentik redirects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create custom /login and /logout endpoints that bypass Auth.js default pages - Use auto-submitting forms to POST to Auth.js with proper form data - Update UserHeader links to use new custom endpoints (/login, /logout) - Remove old login/logout page server files that are no longer needed - Login flow: /login → auto-submit form → /auth/signin/authentik → Authentik - Logout flow: /logout → auto-submit form → /auth/signout → Authentik logout - Provides seamless user experience with loading spinners during redirects - Maintains all Auth.js security features and session management - Eliminates intermediate Auth.js pages for cleaner auth flow 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/lib/components/UserHeader.svelte | 4 +-- src/routes/(main)/login/+page.server.ts | 3 -- src/routes/(main)/logout/+page.server.ts | 3 -- src/routes/login/+server.ts | 35 ++++++++++++++++++++++++ src/routes/logout/+server.ts | 35 ++++++++++++++++++++++++ 5 files changed, 72 insertions(+), 8 deletions(-) delete mode 100644 src/routes/(main)/login/+page.server.ts delete mode 100644 src/routes/(main)/logout/+page.server.ts create mode 100644 src/routes/login/+server.ts create mode 100644 src/routes/logout/+server.ts diff --git a/src/lib/components/UserHeader.svelte b/src/lib/components/UserHeader.svelte index 65a87b8..15593ff 100644 --- a/src/lib/components/UserHeader.svelte +++ b/src/lib/components/UserHeader.svelte @@ -139,10 +139,10 @@ h2 + p{

({user.nickname})

{:else} - Log In + Log In {/if} diff --git a/src/routes/(main)/login/+page.server.ts b/src/routes/(main)/login/+page.server.ts deleted file mode 100644 index 5ac7b62..0000000 --- a/src/routes/(main)/login/+page.server.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { signIn } from "../../../auth" -import type { Actions } from "./$types" -export const actions: Actions = { default: signIn } diff --git a/src/routes/(main)/logout/+page.server.ts b/src/routes/(main)/logout/+page.server.ts deleted file mode 100644 index 5ac7b62..0000000 --- a/src/routes/(main)/logout/+page.server.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { signIn } from "../../../auth" -import type { Actions } from "./$types" -export const actions: Actions = { default: signIn } diff --git a/src/routes/login/+server.ts b/src/routes/login/+server.ts new file mode 100644 index 0000000..f0a20fe --- /dev/null +++ b/src/routes/login/+server.ts @@ -0,0 +1,35 @@ +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ url }) => { + const callbackUrl = url.searchParams.get('callbackUrl') || '/'; + + // Create an auto-submitting form that POSTs to Auth.js signin + const html = ` + + + + Redirecting to login... + + + +

Redirecting to login...

+
+
+ +
+ + +`; + + return new Response(html, { + headers: { + 'Content-Type': 'text/html' + } + }); +}; \ No newline at end of file diff --git a/src/routes/logout/+server.ts b/src/routes/logout/+server.ts new file mode 100644 index 0000000..ab301f8 --- /dev/null +++ b/src/routes/logout/+server.ts @@ -0,0 +1,35 @@ +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ url }) => { + const callbackUrl = url.searchParams.get('callbackUrl') || '/'; + + // Create an auto-submitting form that POSTs to Auth.js signout + const html = ` + + + + Signing out... + + + +

Signing out...

+
+
+ +
+ + +`; + + return new Response(html, { + headers: { + 'Content-Type': 'text/html' + } + }); +}; \ No newline at end of file