From 8124dcae545fe6ce0bb4d757dc3f9d53ea42b0ff Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Mon, 1 Jul 2024 23:39:43 +0000 Subject: [PATCH] update sveltekit guides with the latest ssr setup (#27641) * update sveltekit guides with the latest ssr setup * update style formatting --- .../auth/server-side/creating-a-client.mdx | 7 +- .../guides/auth/server-side/sveltekit.mdx | 45 ++---- .../tutorials/with-sveltekit.mdx | 147 +++++++++--------- 3 files changed, 94 insertions(+), 105 deletions(-) diff --git a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx index 06d1eac5825..ed192bbdf0f 100644 --- a/apps/docs/content/guides/auth/server-side/creating-a-client.mdx +++ b/apps/docs/content/guides/auth/server-side/creating-a-client.mdx @@ -527,8 +527,8 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => { fetch, }, cookies: { - get() { - return JSON.stringify(data.session) + getAll() { + return data.cookies }, }, }) @@ -553,12 +553,13 @@ export const load: LayoutLoad = async ({ fetch, data, depends }) => { ```ts +layout.server.ts import type { LayoutServerLoad } from './$types' -export const load: LayoutServerLoad = async ({ locals: { safeGetSession } }) => { +export const load: LayoutServerLoad = async ({ locals: { safeGetSession }, cookies }) => { const { session, user } = await safeGetSession() return { session, user, + cookies: cookies.getAll(), } } ``` diff --git a/apps/docs/content/guides/auth/server-side/sveltekit.mdx b/apps/docs/content/guides/auth/server-side/sveltekit.mdx index 538614629a4..a612f8bb1e9 100644 --- a/apps/docs/content/guides/auth/server-side/sveltekit.mdx +++ b/apps/docs/content/guides/auth/server-side/sveltekit.mdx @@ -78,17 +78,16 @@ const supabase: Handle = async ({ event, resolve }) => { */ event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, { cookies: { - get: (key) => event.cookies.get(key), + getAll: () => event.cookies.getAll(), /** * SvelteKit's cookies API requires `path` to be explicitly set in * the cookie options. Setting `path` to `/` replicates previous/ * standard behavior. */ - set: (key, value, options) => { - event.cookies.set(key, value, { ...options, path: '/' }) - }, - remove: (key, options) => { - event.cookies.delete(key, { ...options, path: '/' }) + setAll: (cookiesToSet) => { + cookiesToSet.forEach(({ name, value, options }) => { + event.cookies.set(name, value, { ...options, path: '/' }) + }) }, }, }) @@ -174,7 +173,9 @@ declare global { session: Session | null user: User | null } - // interface PageData {} + interface PageData { + session: Session | null + } // interface PageState {} // interface Platform {} } @@ -200,10 +201,8 @@ Create a Supabase client in your root `+layout.ts`. This client can be used to a ```ts src/routes/+layout.ts -import { createBrowserClient, createServerClient, isBrowser, parse } from '@supabase/ssr' - +import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ssr' import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public' - import type { LayoutLoad } from './$types' export const load: LayoutLoad = async ({ data, depends, fetch }) => { @@ -218,20 +217,14 @@ export const load: LayoutLoad = async ({ data, depends, fetch }) => { global: { fetch, }, - cookies: { - get(key) { - const cookie = parse(document.cookie) - return cookie[key] - }, - }, }) : createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, { global: { fetch, }, cookies: { - get() { - return JSON.stringify(data.session) + getAll() { + return data.cookies }, }, }) @@ -256,9 +249,10 @@ export const load: LayoutLoad = async ({ data, depends, fetch }) => { ```ts src/routes/+layout.server.ts import type { LayoutServerLoad } from './$types' -export const load: LayoutServerLoad = async ({ locals: { session } }) => { +export const load: LayoutServerLoad = async ({ locals: { session }, cookies }) => { return { session, + cookies: cookies.getAll(), } } ``` @@ -281,7 +275,7 @@ Set up a listener for Auth events on the client, to handle session refreshes and ```svelte src/routes/+layout.svelte