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
endEnkripsi 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 PBKDF2src/server/auth/index.ts — Getter sesi server auth()src/components/login-form.tsx — Komponen form login clientsrc/app/login/page.tsx — Rute halaman loginTabel Database Terkait
User — Menyimpan email, passwordHash, salt, name, image, roleIdAccount — Data integrasi otentikasi Google OAuthSession — Tabel pelacakan sesi database