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} - + 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') +}