Belajar Authentication & Authorization Dasar di Express.js (bcrypt & JWT)
Pada modul sebelumnya, kita telah berhasil membuat CRUD database MySQL menggunakan Express.js. Namun, backend yang baik tidak cukup hanya CRUD.
Bayangkan jika:
- Semua orang bisa mengakses API
- Semua orang bisa menghapus data
- Tidak ada sistem login
Maka aplikasi tidak aman.
Oleh karena itu, pada modul ini siswa akan belajar:
- Konsep Authentication & Authorization
- Cara menyimpan password dengan aman menggunakan
bcrypt - Dasar proteksi API menggunakan middleware
- Alur login backend yang mendekati real-world backend
Modul ini adalah gerbang penting sebelum masuk ke:
- JWT
- Role user (admin, user)
- REST API skala besar
Konsep Dasar (WAJIB PAHAM)
- Authentication
Proses mengecek identitas pengguna
Contoh:
- Login dengan username & password
- Login dengan username & password
2. Authorization
Proses menentukan hak akses
Contoh:
- Apakah user boleh akses data?
- Apakah user boleh hapus data?
Authentication dulu, baru Authorization
Persiapan Project
Library yang Digunakan
npm i bcrypt
npm i jsonwebtokenPenjelasan:
- bcrypt → mengenkripsi (hash) password
- jsonwebtoken (JWT) → token login (akan dipakai bertahap)
Struktur Folder Project
Penjelasan Singkat
- controller → logika bisnis
- router → pengatur endpoint API
- middleware → pengecekan & penjagaan request
- config → konfigurasi database
- server.js → file utama backend
STEP 1 — Tabel Users (Authentication)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(255)
);Penjelasan:
passwordpanjang 255 → karena hasil hash bcrypt panjang- Satu user = satu akun login
STEP 2— Register User (userController.js)
Fungsi:
bcrypt→ mengamankan passworddb→ koneksi database
req.body berisi data dari client (Postman / frontend)
Validasi Input
Tujuan:
- Mencegah data kosong
- Backend harus tegas
Hash Password
Penjelasan:
- Password asli → diubah jadi hash
- Angka
10= tingkat keamanan (salt rounds)
Bahkan admin tidak bisa melihat password asli
Simpan ke Database? digunakan untuk:
- Mencegah SQL Injection
- Best practice backend
STEP 3— Routing Register (userController.js)
Artinya:
- Endpoint:
POST /user/register - Digunakan untuk registrasi user
STEP 4— Middleware Authorization (auth.js)
Token akan dikirim dari client lewat Header
Jika:
- Tidak ada token
- Maka akses ditolak
Artinya:
- Lanjut ke controller
- Request diizinkan
Inilah inti Authorization
STEP 5— Proteksi Endpoint (router.js)
Tambahkan code di baris 4 untuk memanggil file auth.js yang berada di folder middleware
Makna:
- Semua endpoint ini wajib login
- Tanpa token → 401 Unauthorized
STEP 6— Error Handler Global (errorHandler.js)
Keuntungan:
- Error tidak berantakan
- Mudah debug
- Backend lebih profesional
STEP 7— Server Utama (server.js)
/user → Authentication
Get Muh. Alif Anhar’s stories in your inbox
Join Medium for free to get updates from this writer.
Middleware error harus di paling bawah
STEP 8— Perbaikan di Controller (basoController.js)
- Tampilkan seluruh data (GET Data)
Penjelasan:
tampilDataadalah fungsi controller- Fungsi ini dipanggil saat client melakukan GET request
req→ data dari clientres→ respon yang dikirim ke clientnext→ meneruskan error ke middleware lainasync→ menandakan fungsi ini memakaiawaittrydigunakan untuk menangkap error- Jika terjadi kesalahan di dalam
try, program tidak langsung crash query→ Menyimpan perintah SQLSELECT *→ mengambil semua kolomFROM product→ dari tabelproductdb.query()menjalankan perintah SQL ke MySQLawait→ menunggu hasil dari databaserows→ hasil data dari database (array of object)res.status(200)→ kode HTTP berhasiljson()→ mengirim respon dalam bentuk JSONcatchakan dijalankan jika terjadi error di dalamtry
Alur Kerja Fungsi Ini (Ringkas)
- Client mengirim request GET /Server menjalankan query ke database
-
- Data diambil dari tabel productServer mengirim respon JSON
-
- Jika error → dikirim ke errorHandler
2. Tampilkan data sesuai Id (Get By ID)
Alur Kerja Fungsi getById
- Client mengirim request
- Mengakses endpoint dengan ID
Contoh:GET /product/3
2. Server mengambil ID dari URL
req.params.iddigunakan untuk menangkap nilai ID yang dikirim
3. Server menjalankan query ke database
- Mencari data di tabel
productberdasarkan ID tersebut
4. Cek apakah data ditemukan
- Jika hasil query kosong → kirim respon 404 (data tidak ditemukan)
5. Jika data ada
- Server mengirim respon 200 (berhasil) beserta data produk
6. Jika terjadi error
- Error diteruskan ke
errorHandlermenggunakannext(error)
Alur Kerja Fungsi updateData
- Client mengirim request
- Request
PUTdengan ID di URL
Contoh:PUT /product/3
2. Server mengambil ID & data
iddiambil darireq.paramsnamadanhargadiambil darireq.body
3. Validasi data
- Jika
namaatauhargakosong → respon 400 - Jika
hargabukan angka → respon 400
4. Update data ke database
- Server menjalankan query
UPDATEberdasarkan ID
5. Kirim respon berhasil
- Jika sukses → 200 (berhasil update data)
6. Jika terjadi error
- Error diteruskan ke
errorHandlerdengannext(error)
Alur Kerja Fungsi deleteData
- Client mengirim request
- Request
DELETEdengan ID di URL
Contoh:DELETE /product/3
2. Server mengambil ID
iddiambil darireq.params
3. Hapus data di database
- Server menjalankan query
DELETEberdasarkan ID
4. Kirim respon berhasil
- Jika sukses → respon berhasil delete data
5. Jika terjadi error
- Error diteruskan ke
errorHandlermenggunakannext(error)
Contoh hasilnya jika menambah data di tabel User
Proses di Backend:
- Password di-hash menggunakan
bcrypt - Disimpan ke tabel
users
Di password di hash menggunakan bcrypt
Contoh hasilnya jika menambah data di Tabel User tetapi tidak sesuai dengan validasi
Di code kita menggunakan validasi untuk username dan password wajib di isi
Jika tidak sesuai dengan validasinya maka muncul Username dan password wajib diisi
Contoh hasilnya jika mengambil seluruh data menggunakan token
Token berfungsi sebagai tanda pengenal dan bukti akses pengguna ke server setelah login. Token = kunci masuk ke endpoint yang dilindungi (protected endpoint)
Contoh hasilnya jika mengambil seluruh data tanpa menggunakan token
Contoh hasilnya jika menambah data di Tabel Product tetapi tidak sesuai dengan validasi
Contoh hasilnya jika edit data di Tabel Product tetapi tidak sesuai dengan validasi
Pada tahap ini, kita sudah melangkah jauh dari sekadar routing dasar di Express.js. Siswa tidak hanya belajar bagaimana membuat CRUD, tetapi juga mulai memahami bagaimana backend bekerja di dunia nyata.
Melalui materi ini, siswa telah mempelajari:
- Struktur project backend yang rapi dan terorganisir
- Pemisahan tugas antara router, controller, dan middleware
- Cara menghubungkan Express.js dengan database MySQL
- Validasi data agar database tetap aman
- Hashing password menggunakan bcrypt
- Konsep authentication dan authorization menggunakan middleware
- Cara melindungi endpoint agar tidak bisa diakses sembarang user
- Penanganan error secara terpusat menggunakan error handler
Semua konsep ini merupakan fondasi penting bagi seorang Backend Developer, baik untuk kebutuhan magang, project sekolah, maupun persiapan masuk ke dunia kerja.
Jika siswa sudah memahami materi ini dengan baik, maka mereka sudah siap untuk melanjutkan ke tahap berikutnya, seperti:
- Login user dengan
bcrypt.compare - Pembuatan dan verifikasi JWT (JSON Web Token)
- Proteksi API berbasis token
- Role user (admin dan user)
- Pembuatan REST API yang lebih kompleks dan aman
Backend bukan hanya tentang “kode jalan”, tetapi tentang keamanan, struktur, dan tanggung jawab terhadap data.
Dengan memahami alur ini, siswa tidak hanya belajar Express.js, tetapi juga belajar cara berpikir sebagai Backend Developer.









