HostBase

Frameworki

Next.js

HostBase w aplikacji Next.js (App Router) z obsługą sesji po stronie serwera.

Rekomendowane podejście dla App Routera to pakiet @supabase/ssr, który przechowuje sesję w ciasteczkach i działa w Server Components, Route Handlers i Server Actions.

Instalacja

npm install @supabase/supabase-js @supabase/ssr

Zmienne środowiskowe

# .env.local
NEXT_PUBLIC_SUPABASE_URL=https://abcdefghijklmnopqrst.host.ulewicz.space
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Nazwy zmiennych możesz zostawić takie jak w Supabase — migracja sprowadza się wtedy do podmiany wartości.

Klient przeglądarkowy

// lib/supabase/client.ts
import { createBrowserClient } from "@supabase/ssr";

export function createClient() {
  return createBrowserClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
  );
}

Klient serwerowy

// lib/supabase/server.ts
import { createServerClient } from "@supabase/ssr";
import { cookies } from "next/headers";

export async function createClient() {
  const cookieStore = await cookies();
  return createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll: () => cookieStore.getAll(),
        setAll: (list) => {
          try {
            list.forEach(({ name, value, options }) =>
              cookieStore.set(name, value, options)
            );
          } catch {
            // wywołane z Server Component — odświeżanie sesji obsłuży proxy
          }
        },
      },
    }
  );
}

Pobieranie danych w Server Component

// app/todos/page.tsx
import { createClient } from "@/lib/supabase/server";

export default async function TodosPage() {
  const supabase = await createClient();
  const { data: todos } = await supabase.from("todos").select("id, task, done");
  return (
    <ul>
      {todos?.map((t) => <li key={t.id}>{t.task}</li>)}
    </ul>
  );
}

Odświeżanie sesji

W Next.js 16 middleware nazywa się proxy.ts. Utwórz go w katalogu głównym (lub src/) i wywołaj w nim supabase.auth.getUser(), aby odświeżać token przy każdym żądaniu — dokładnie tak jak w oficjalnym przewodniku Supabase dla @supabase/ssr.