From 74f626074697a2e1ae72d0e44f5ba0aea821642d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Wed, 20 Dec 2023 21:46:48 +0100 Subject: [PATCH] feat: exploring SvelteKit forms with Login MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I'm not happy with using Cookies for it, but it served me in understanding how to handle forms in SvelteKit. Signed-off-by: André Jaenisch --- src/routes/account/login/+page.server.js | 31 +++++++++++++++++ src/routes/account/login/+page.svelte | 31 +++++++++++++---- src/routes/profile/+page.server.js | 13 +++++++ src/routes/profile/+page.svelte | 43 ++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 src/routes/account/login/+page.server.js create mode 100644 src/routes/profile/+page.server.js create mode 100644 src/routes/profile/+page.svelte diff --git a/src/routes/account/login/+page.server.js b/src/routes/account/login/+page.server.js new file mode 100644 index 0000000..331a045 --- /dev/null +++ b/src/routes/account/login/+page.server.js @@ -0,0 +1,31 @@ +import { fail, redirect } from '@sveltejs/kit'; + +/** @type {import('./$types').Actions} */ +export const actions = { + login: async ({ cookies, request, url }) => { + const formData = await request.formData(); + const server = formData.get('server'); + const account = formData.get('account'); + const passphrase = formData.get('passphrase'); + + if (!account) { + return fail(400, { account, missing: true }); + } + + if (!passphrase) { + return fail(400, { account, incorrect: true }); + } + + cookies.set('ANVIL', [server, account].join('-'), { path: '/' }); + + if (url.searchParams.has('redirectTo')) { + // TODO: Remove the throw when upgrading SvelteKit + throw redirect(303, url.searchParams.get('redirectTo')); + } + + throw redirect(303, '/profile'); + + // This should be dead code now. + return { success: true }; + } +}; diff --git a/src/routes/account/login/+page.svelte b/src/routes/account/login/+page.svelte index 042a5ac..0ae9ded 100644 --- a/src/routes/account/login/+page.svelte +++ b/src/routes/account/login/+page.svelte @@ -1,11 +1,26 @@ + +

Log in

-

To use Anvil with your F2 account, fill in your credentials.

-
+ {#if form?.success} +

+ Welcome back! Please move to your profile. +

+ {:else} +

+ To use Anvil with your F2 account, fill in your credentials. +

+ {/if} +
+ {#if form?.missing}

The account field is required.

{/if} + {#if form?.incorrect}

Account or password wrong.

{/if} - Log in -
+ +
diff --git a/src/routes/profile/+page.server.js b/src/routes/profile/+page.server.js new file mode 100644 index 0000000..73df4dd --- /dev/null +++ b/src/routes/profile/+page.server.js @@ -0,0 +1,13 @@ +/** @type {import('./$types').PageServerLoad} */ +export function load({ cookies, params }) { + // Read login cookie + const cookie = cookies.get('ANVIL'); + const [server, account] = cookie.split('-'); + + return { + user: { + displayname: account, + username: 'fr33domlover', + } + }; +} diff --git a/src/routes/profile/+page.svelte b/src/routes/profile/+page.svelte new file mode 100644 index 0000000..a61c6ac --- /dev/null +++ b/src/routes/profile/+page.svelte @@ -0,0 +1,43 @@ + + +
+
+

Profile

+
+
{@html data.user.displayname}
+
+
+
+

Your projects

+

+ You don't have any projects yet. +

+
+
+

Your repositories

+

+ You don't have any repositories yet. +

+
+
+

Your news

+

+ Nothing here yet. +

+
+
+

Your notifications

+

+ You don't have any notifications yet. +

+
+
+

Your settings

+

+ Adjust Anvil to your liking. +

+
+