--- name: authentication-logic description: Guide to using Better Auth for client and server-side authentication. --- # Authentication Logic ## Overview We use **Better Auth** (`better-auth`) for identifying users. ## Config - **Client**: `lib/auth-client.ts` exports `authClient`. - **Server**: `lib/auth.ts` exports `auth`. ## Client-Side Usage Use `authClient` for signing in, signing out, and checking session state in Client Components. ```tsx import { authClient } from "@/lib/auth-client"; // Sign In await authClient.signIn.email({ email, password, }); // Social Sign In await authClient.signIn.social({ provider: "google", callbackURL: "/onboarding", }); // Sign Out await authClient.signOut(); ``` ## Server-Side Usage Use `auth.api.getSession` for protecting API routes or Server Actions. ```ts import { auth } from "@/lib/auth"; import { headers } from "next/headers"; const session = await auth.api.getSession({ headers: await headers() }); if (!session) { return new Response("Unauthorized", { status: 401 }); } ``` ## AuthBar Component - Located at `textbook/src/components/AuthBar/index.tsx`. - Displays user avatar or login button. - Fetches session from `/api/auth/session` (Next.js API route proxying Better Auth).