JWT & Bcrypt

Autentikasi dengan token dan penyimpanan password yang aman di backend Node.js.

A. Pengenalan JWT (JSON Web Token)

JWT (JSON Web Token) adalah metode autentikasi yang digunakan untuk
mengamankan komunikasi antara frontend dan backend.

JWT digunakan setelah user berhasil login, lalu server akan memberikan
token sebagai bukti identitas user.

Fungsi JWT

1. Sebagai bukti bahwa user sudah login
2. Mengamankan endpoint API (protected route)
3. Menggantikan session (tanpa perlu simpan data di server)
4. Membawa informasi user (id, email, dll) dalam bentuk terenkripsi

Cara Kerja JWT

1. User login ke sistem
2. Server memverifikasi email & password
3. Server membuat token JWT
4. Token dikirim ke frontend
5. Frontend menyimpan token
6. Setiap request ke backend harus menyertakan token
7. Server memverifikasi token sebelum memberi akses

Persiapan di Backend (setelah install JWT)

Alur umum: Register → Login → JWT → Protect Route

backend/

middlewares/
  auth.js   <-- untuk verifikasi token JWT

Persiapan di Frontend

1. Siapkan tempat penyimpanan token:
   - localStorage / sessionStorage

2. Setiap request ke backend harus menyertakan token

3. Buat proteksi halaman (private route)

B. Bcrypt (hash password)

Bcrypt dipakai untuk meng-hash password sebelum disimpan ke database.

Kenapa penting:
- Password TIDAK boleh disimpan sebagai teks biasa (plain text)
- Saat login, bandingkan password input dengan hash yang tersimpan

Alur singkat register:
1. User kirim password dari frontend
2. Backend hash dengan bcrypt (salt otomatis)
3. Simpan hash ke database

Alur singkat login:
1. User kirim email + password
2. Backend ambil hash user dari database
3. bcrypt.compare(password_input, hash_di_db)
Paket umum di Node: bcrypt atau bcryptjs. Ikuti dokumentasi resmi untuk versi yang kamu install.

Catatan Penting JWT & Keamanan

- JWT bersifat stateless (server tidak menyimpan session klasik)
- Token memiliki masa expired
- Jangan pernah membagikan JWT_SECRET
- Gunakan HTTPS di production
- Password user: hash dengan bcrypt, bukan disimpan apa adanya