Skit

Authentication

Skit uses Better Auth for authentication — a modern, type-safe auth library for Next.js.

Modules

auth-core

Included in every project. Provides:

  • Email/password authentication
  • Session management with database sessions
  • Middleware-based route protection
  • Sign in / sign up pages
  • Auth utilities (auth-client.ts, auth-session.ts)

auth-github

Optional. Added when --auth email-password+github or --auth email-password+github+google is selected.

  • GitHub OAuth provider configuration
  • Social login button on sign-in page

Requires GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET env vars.

auth-google

Optional. Added when --auth email-password+google or --auth email-password+github+google is selected.

  • Google OAuth provider configuration
  • Social login button on sign-in page

Requires GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET env vars.

Auth options

--auth valueModules included
email-passwordauth-core
email-password+githubauth-core, auth-github
email-password+googleauth-core, auth-google
email-password+github+googleauth-core, auth-github, auth-google

Key files

FilePurpose
src/lib/auth.tsBetter Auth server configuration
src/lib/auth-client.tsClient-side auth utilities
src/lib/auth-session.tsServer-side session helper
src/app/api/auth/[...all]/route.tsAuth API catch-all route
src/middleware.tsRoute protection middleware
src/app/sign-in/page.tsxSign in page
src/app/sign-up/page.tsxSign up page

Route protection

Routes under /dashboard, /settings, /billing are protected by middleware. Unauthenticated users are redirected to /sign-in.

// src/middleware.ts
const protectedRoutes = ['/dashboard', '/settings', '/billing'];

Session access

Server components:

import { getSession } from '@/lib/auth-session';

const session = await getSession();
if (!session) redirect('/sign-in');

Client components:

import { useSession } from '@/lib/auth-client';

const { data: session } = useSession();