diff --git a/src/routes/auth/+page.server.ts b/src/routes/auth/+page.server.ts new file mode 100644 index 0000000..013b7b4 --- /dev/null +++ b/src/routes/auth/+page.server.ts @@ -0,0 +1,20 @@ +import { redirect } from '@sveltejs/kit'; +import type { Actions } from './$types'; +import type { PageServerLoad } from './$types'; +import { auth } from '$lib/server/auth'; + +export const load: PageServerLoad = (event) => { + if (!event.locals.user) { + return redirect(302, '/auth/login'); + } + return { user: event.locals.user }; +}; + +export const actions: Actions = { + signOut: async (event) => { + await auth.api.signOut({ + headers: event.request.headers + }); + return redirect(302, '/auth/login'); + } +}; diff --git a/src/routes/demo/better-auth/+page.svelte b/src/routes/auth/+page.svelte similarity index 100% rename from src/routes/demo/better-auth/+page.svelte rename to src/routes/auth/+page.svelte diff --git a/src/routes/auth/login/+page.server.ts b/src/routes/auth/login/+page.server.ts new file mode 100644 index 0000000..35c7c7c --- /dev/null +++ b/src/routes/auth/login/+page.server.ts @@ -0,0 +1,78 @@ +import { fail, redirect } from '@sveltejs/kit'; +import type { Actions } from './$types'; +import type { PageServerLoad } from './$types'; +import { auth } from '$lib/server/auth'; +import { APIError } from 'better-auth/api'; + +export const load: PageServerLoad = (event) => { + if (event.locals.user) { + return redirect(302, '/demo/auth'); + } + return {}; +}; + +export const actions: Actions = { + signInEmail: async (event) => { + const formData = await event.request.formData(); + const email = formData.get('email')?.toString() ?? ''; + const password = formData.get('password')?.toString() ?? ''; + + try { + await auth.api.signInEmail({ + body: { + email, + password, + callbackURL: '/auth/verification-success' + } + }); + } catch (error) { + if (error instanceof APIError) { + return fail(400, { message: error.message || 'Signin failed' }); + } + return fail(500, { message: 'Unexpected error' }); + } + + return redirect(302, '/demo/auth'); + }, + signUpEmail: async (event) => { + const formData = await event.request.formData(); + const email = formData.get('email')?.toString() ?? ''; + const password = formData.get('password')?.toString() ?? ''; + const name = formData.get('name')?.toString() ?? ''; + + try { + await auth.api.signUpEmail({ + body: { + email, + password, + name, + callbackURL: '/auth/verification-success' + } + }); + } catch (error) { + if (error instanceof APIError) { + return fail(400, { message: error.message || 'Registration failed' }); + } + return fail(500, { message: 'Unexpected error' }); + } + + return redirect(302, '/demo/auth'); + }, + signInSocial: async (event) => { + const formData = await event.request.formData(); + const provider = formData.get('provider')?.toString() ?? 'github'; + const callbackURL = formData.get('callbackURL')?.toString() ?? '/demo/auth'; + + const result = await auth.api.signInSocial({ + body: { + provider: provider as 'github', + callbackURL + } + }); + + if (result.url) { + return redirect(302, result.url); + } + return fail(400, { message: 'Social sign-in failed' }); + } +}; diff --git a/src/routes/demo/better-auth/login/+page.svelte b/src/routes/auth/login/+page.svelte similarity index 100% rename from src/routes/demo/better-auth/login/+page.svelte rename to src/routes/auth/login/+page.svelte diff --git a/src/routes/demo/+page.svelte b/src/routes/demo/+page.svelte deleted file mode 100644 index 948d26f..0000000 --- a/src/routes/demo/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -better-auth diff --git a/src/routes/demo/better-auth/+page.server.ts b/src/routes/demo/better-auth/+page.server.ts deleted file mode 100644 index 92a1f2e..0000000 --- a/src/routes/demo/better-auth/+page.server.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { redirect } from '@sveltejs/kit'; -import type { Actions } from './$types'; -import type { PageServerLoad } from './$types'; -import { auth } from '$lib/server/auth'; - -export const load: PageServerLoad = (event) => { - if (!event.locals.user) { - return redirect(302, '/demo/better-auth/login'); - } - return { user: event.locals.user }; -}; - -export const actions: Actions = { - signOut: async (event) => { - await auth.api.signOut({ - headers: event.request.headers - }); - return redirect(302, '/demo/better-auth/login'); - } -}; diff --git a/src/routes/demo/better-auth/login/+page.server.ts b/src/routes/demo/better-auth/login/+page.server.ts deleted file mode 100644 index d26badc..0000000 --- a/src/routes/demo/better-auth/login/+page.server.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { fail, redirect } from '@sveltejs/kit'; -import type { Actions } from './$types'; -import type { PageServerLoad } from './$types'; -import { auth } from '$lib/server/auth'; -import { APIError } from 'better-auth/api'; - -export const load: PageServerLoad = (event) => { - if (event.locals.user) { - return redirect(302, '/demo/better-auth'); - } - return {}; -}; - -export const actions: Actions = { - signInEmail: async (event) => { - const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; - - try { - await auth.api.signInEmail({ - body: { - email, - password, - callbackURL: '/auth/verification-success' - } - }); - } catch (error) { - if (error instanceof APIError) { - return fail(400, { message: error.message || 'Signin failed' }); - } - return fail(500, { message: 'Unexpected error' }); - } - - return redirect(302, '/demo/better-auth'); - }, - signUpEmail: async (event) => { - const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; - const name = formData.get('name')?.toString() ?? ''; - - try { - await auth.api.signUpEmail({ - body: { - email, - password, - name, - callbackURL: '/auth/verification-success' - } - }); - } catch (error) { - if (error instanceof APIError) { - return fail(400, { message: error.message || 'Registration failed' }); - } - return fail(500, { message: 'Unexpected error' }); - } - - return redirect(302, '/demo/better-auth'); - }, - signInSocial: async (event) => { - const formData = await event.request.formData(); - const provider = formData.get('provider')?.toString() ?? 'github'; - const callbackURL = formData.get('callbackURL')?.toString() ?? '/demo/better-auth'; - - const result = await auth.api.signInSocial({ - body: { - provider: provider as 'github', - callbackURL - } - }); - - if (result.url) { - return redirect(302, result.url); - } - return fail(400, { message: 'Social sign-in failed' }); - } -};