Skip to content
Dashboard

Announcing SvelteKit Auth: Bringing NextAuth.js to all frameworks

Software Engineer

Link to headingWhy SvelteKit?

Link to headingUsing SvelteKit Auth with SvelteKit 1.0

src/hooks.server.ts
import SvelteKitAuth from "@auth/sveltekit"
import GitHub from '@auth/core/providers/github';
import { GITHUB_ID, GITHUB_SECRET } from "$env/static/private"
export const handle = SvelteKitAuth({
providers: [
GitHub({ clientId: GITHUB_ID, clientSecret: GITHUB_SECRET }),
]
});

Configuring SvelteKit Auth to use the GitHub OAuth Provider.

<script>
import { signIn, signOut } from '@auth/sveltekit/client';
import { page } from '$app/stores';
</script>
<p>
{#if Object.keys($page.data.session || {}).length}
{#if $page.data.session.user.image}
<span style="background-image: url('{$page.data.session.user.image}')" class="avatar" />
{/if}
<span class="signedInText">
<small>Signed in as</small><br />
<strong>{$page.data.session.user.email || $page.data.session.user.name}</strong>
</span>
<button on:click={() => signOut()} class="button">Sign out</button>
{:else}
<span class="notSignedInText">You are not signed in</span>
<button on:click={() => signIn('github')}>Sign In with GitHub</button>
{/if}
</p>

Using SvelteKit Auth to allow the user to sign in or out on the page.

import { redirect } from "@sveltejs/kit"
import type { PageLoad } from "./$types"
export const load: PageLoad = async ({ parent }) => {
const { session } = await parent()
if (!session?.user) {
throw redirect(302, "/")
}
return {}
}

Protecting a route with SvelteKit auth.

Link to headingGet started with SvelteKit Auth