3.7 KiB
Progress
Catatan sementara untuk melanjutkan pekerjaan di komputer lain. Hapus file ini kalau halaman login sudah selesai.
Terakhir diperbarui: 2026-10-20.
Sudah selesai
- Drizzle ORM +
pgke Postgres (db/,drizzle.config.ts, scriptdb:*). - Better Auth 1.7: login pakai username, tabel auth sudah di-migrate, sign-up publik ditutup.
Endpoint di
app/api/auth/[...all]/route.ts. - shadcn/ui preset
base-nova, komponen: button, input, label, card, field, separator. old-source/di-commit tanpadb_login.inc.php(kredensial).- Halaman login, langkah 1 sampai 3 dari 7:
zodterpasang.data/auth.ts:getCurrentUser()cek session, redirect ke/loginkalau belum login.app/(auth)/login/actions.ts: server actionlogin(validasi zod, laluauth.api.signInUsername, laluredirect("/")).
Berikutnya: halaman login, langkah 4 sampai 7
-
Form login (client component)
app/(auth)/login/_components/login-form.tsx, diawali"use client". PakaiuseActionState(login, {}). IsinyaCardberisiFieldGroupdengan duaField(username dan password,name="username"/name="password"),FieldErroruntukstate.error, danButton type="submit"yangdisabledsaatpending. Input username diberidefaultValue={state.username}supaya tidak kosong setelah gagal login. -
Halaman login
app/(auth)/login/page.tsx: Server Component yang menampilkan<LoginForm />di tengah layar. -
Pindahkan halaman utama ke grup dashboard Hapus
app/page.tsx(bawaan create-next-app), lalu buatapp/(dashboard)/page.tsx. Komponen yang memanggilgetCurrentUser()harus dibungkus<Suspense>karenacacheComponentsaktif (tanpa itu build gagal). Tampilkan nama user yang login. -
Logout
app/(dashboard)/actions.tsdengan"use server": actionlogoutmemanggilauth.api.signOut({ headers: await headers() })laluredirect("/login"). Pasang lewat<form action={logout}><Button type="submit">Keluar</Button></form>di halaman dashboard.
Cek akhir: buka / saat belum login, harus diarahkan ke /login. Login sebagai admin,
nama tampil di /. Klik Keluar, kembali ke /login. Lalu pnpm exec tsc --noEmit dan pnpm lint.
Setelah itu: commit, lalu rencana berikutnya (belum dimulai):
- User read-only (hanya
SELECT) di MariaDB untukAMIGO_DATABASE_URL, menggantikanroot. - Koneksi Drizzle ke MariaDB di
db/amigo/dengandrizzle-kit pull(jangan pernah migrate/push). proxy.tsuntuk redirect cepat ke/loginkalau tidak ada cookie session.
Menyiapkan komputer lain
Yang tidak ada di git dan harus disiapkan ulang:
-
.env: isiDATABASE_URL,BETTER_AUTH_SECRET,BETTER_AUTH_URL,AMIGO_DATABASE_URL. BuatBETTER_AUTH_SECRETbaru:node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" -
Postgres lokal:
docker run -d --name cleo-postgres -e POSTGRES_PASSWORD=<password> -e POSTGRES_DB=cleo_auth -p 5432:5432 -v cleo-pgdata:/var/lib/postgresql/data postgres:17 -
pnpm install, lalupnpm db:migrateuntuk membuat tabel auth. -
Akun admin dibuat ulang. Sign-up sedang ditutup, jadi sementara hapus
disableSignUp: truedilib/auth.ts, jalankanpnpm dev, kirim request sign-up:$body = @{ name = "Administrator"; email = "admin@cleo.local"; username = "admin"; password = "<password>" } | ConvertTo-Json Invoke-RestMethod -Method Post -Uri "http://localhost:3000/api/auth/sign-up/email" -ContentType "application/json" -Headers @{ Origin = "http://localhost:3000" } -Body $bodylalu kembalikan
disableSignUp: true. -
MariaDB
cleodi192.168.3.3hanya bisa diakses dari jaringan kantor. Halaman login tidak membutuhkannya.