diff --git a/src/lib/components/MagicLink.svelte b/src/lib/components/MagicLink.svelte
new file mode 100644
index 0000000..dda34f4
--- /dev/null
+++ b/src/lib/components/MagicLink.svelte
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 627835a..2399c15 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -5,14 +5,14 @@
import { basket, type Basket, type Item } from '$lib/stores/basket.js';
import { general } from '$lib/stores/generalStore.js';
import { invalidate } from '$app/navigation';
- import SignIn from '$lib/components/SignIn.svelte';
import SignOut from '$lib/components/SignOut.svelte';
import CookieConsent from '$lib/components/CookieConsent.svelte';
import NavLinks from '$lib/components/NavLinks.svelte';
+ import MagicLink from '$lib/components/MagicLink.svelte';
export let data;
- let { supabase, session } = data;
- $: ({ supabase, session } = data);
+ let { supabase, session, url } = data;
+ $: ({ supabase, session, url } = data);
let localBasket: Basket;
const unsubscribeToBasket = basket.subscribe((value) => {
@@ -113,8 +113,8 @@
{localBasket.items.length}
-
-
+
+
{#if session?.user}
@@ -130,7 +130,7 @@
{/if}
-
+
{#if session?.user}
{/if}
-
+
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts
index 37bbb09..7a3ea7a 100644
--- a/src/routes/+layout.ts
+++ b/src/routes/+layout.ts
@@ -2,7 +2,7 @@ import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ss
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public';
import type { LayoutLoad } from './$types';
-export const load: LayoutLoad = async ({ fetch, data, depends }) => {
+export const load: LayoutLoad = async ({ fetch, data, depends, url }) => {
depends('supabase:auth');
const supabase = isBrowser()
@@ -31,5 +31,5 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => {
data: { session }
} = await supabase.auth.getSession();
- return { supabase, session };
+ return { supabase, session, url: url.origin };
};
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index f0db6cd..2047ba0 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,9 +1,9 @@
{#if session !== null}
@@ -19,7 +19,7 @@
-
+
diff --git a/src/routes/account/+page.server.ts b/src/routes/account/+page.server.ts
index f2a414a..d839775 100644
--- a/src/routes/account/+page.server.ts
+++ b/src/routes/account/+page.server.ts
@@ -8,41 +8,39 @@ export const load: PageServerLoad = async ({ locals: { supabase, safeGetSession
redirect(303, '/');
}
- const { data: profile } = await supabase
- .from('profiles')
- .select(`username, full_name`)
+ const { data: user } = await supabase
+ .from('users')
+ .select(`name`)
.eq('id', session.user.id)
.single();
- return { session, profile };
+ return { session, user };
};
export const actions: Actions = {
update: async ({ request, locals: { supabase, safeGetSession } }) => {
const formData = await request.formData();
- const fullName = formData.get('fullName') as string;
+ const name = formData.get('name') as string;
const { session } = await safeGetSession();
- const { error } = await supabase.from('profiles').upsert({
- id: session?.user.id,
- full_name: fullName,
- username: session?.user.email,
- updated_at: new Date()
- });
+ if (!session) {
+ return fail(401, { name });
+ }
+ const { error } = await supabase.from('users').update({
+ name: name,
+ }).eq('id', session?.user.id);
console.error(error);
if (error) {
return fail(500, {
- fullName,
- username: session?.user.email
+ name,
});
}
return {
- fullName,
- username: session?.user.email
+ name,
};
},
signout: async ({ locals: { supabase, safeGetSession } }) => {
diff --git a/src/routes/account/+page.svelte b/src/routes/account/+page.svelte
index 5e26972..d133724 100644
--- a/src/routes/account/+page.svelte
+++ b/src/routes/account/+page.svelte
@@ -5,12 +5,12 @@
export let data;
export let form;
- let { session, supabase, profile } = data;
- $: ({ session, supabase, profile } = data);
+ let { session, supabase, user } = data;
+ $: ({ session, supabase, user } = data);
let profileForm: HTMLFormElement;
let loading = false;
- let fullName: string = profile?.full_name ?? '';
+ let name: string = user?.name ?? '';
const handleSubmit: SubmitFunction = () => {
loading = true;
@@ -37,13 +37,8 @@
bind:this={profileForm}
>
-
-
-
-
-
-
-
+
+
diff --git a/src/routes/auth/callback/+server.ts b/src/routes/auth/callback/+server.ts
new file mode 100644
index 0000000..5f160a7
--- /dev/null
+++ b/src/routes/auth/callback/+server.ts
@@ -0,0 +1,14 @@
+import { redirect, type RequestHandler } from '@sveltejs/kit'
+
+export const GET: RequestHandler = async (event) => {
+ const { url, locals: { supabase } } = event;
+ const code = url.searchParams.get('code')
+
+ if (code) {
+ await supabase.auth.exchangeCodeForSession(code)
+ }
+
+ // TODO: Create stripe customer and sync with supabase user
+
+ throw redirect(303, '/account')
+}