05. Otentikasi & Keamanan Akun

Ringkasan

Sistem otentikasi ditenagai oleh NextAuth.js, mendukung masuk menggunakan email/password lokal dengan enkripsi tingkat tinggi PBKDF2 Hashing, serta opsional login Google OAuth.


Cara Kerja

Sesi login disimpan dalam token cookie JWT terenkripsi. Saat login, kredensial diverifikasi oleh NextAuth CredentialsProvider pada src/server/auth/config.ts:

mermaid
sequenceDiagram
    autonumber
    actor User
    participant Form as Form Login (Client)
    participant Auth as NextAuth Handler
    participant DB as MySQL (Prisma)
    
    User->>Form: Masukkan Email & Password
    Form->>Auth: signIn("credentials", { email, password })
    Auth->>DB: findUnique({ where: { email } })
    DB-->>Auth: Data User (passwordHash & salt)
    Auth->>Auth: Verifikasi PBKDF2 hash (hashPassword(password, salt))
    alt Cocok Valid
        Auth-->>Form: Kembalikan Cookie Sesi JWT
        Form-->>User: Pengalihan Rute ke /dashboard
    else Tidak Valid
        Auth-->>Form: Tampilkan Eror Otentikasi
    end

Enkripsi Kata Sandi

Password pengguna dienkripsi menggunakan metode crypto.pbkdf2Sync pada src/server/auth/config.ts:

typescript
export function hashPassword(password: string, salt: string): string {
  return crypto.pbkdf2Sync(password, salt, 10000, 64, "sha512").toString("hex");
}

Berkas Terkait

  • src/server/auth/config.ts — Konfigurasi provider NextAuth & enkripsi PBKDF2
  • src/server/auth/index.ts — Getter sesi server auth()
  • src/components/login-form.tsx — Komponen form login client
  • src/app/login/page.tsx — Rute halaman login

  • Tabel Database Terkait

  • User — Menyimpan email, passwordHash, salt, name, image, roleId
  • Account — Data integrasi otentikasi Google OAuth
  • Session — Tabel pelacakan sesi database