Back to blog
Security

Melindungi Route API Menggunakan Middleware Verifikasi JWT

Bagaimana cara agar data 'Profil Rahasia' hanya bisa dibuka oleh orang yang sudah Login? Tambahkan fungsi Satpam Penjaga Pintu di tengah jalur Express.js.

super admin·30 Juni 2026·2 min read
Melindungi Route API Menggunakan Middleware Verifikasi JWT
Article Content

Fungsi Satpam Penjaga Pintu Khusus (Middleware)

Kita punya Endpoint GET /api/profil-rahasia. Jika kita biarkan telanjang, siapapun di internet bisa membuka data ini. Kita harus memasang Middleware (Fungsi Penengah) yang akan menyetop siapapun yang tidak membawa Token JWT valid.

Membuat Fungsi Middleware

Buat fungsi terpisah di atas rute-rutemu. Tugas fungsi ini 3: Mencegat, Mengecek KTP, dan Mempersilakan masuk (next()) jika valid.

// Fungsi Satpam (Auth Middleware)
function verifikasiToken(req, res, next) {
  // 1. Ambil KTP dari kantong pengunjung (Header HTTP)
  const headerAuth = req.headers['authorization'];
  
  if (!headerAuth) {
    return res.status(403).json({ pesan: "Dilarang masuk! Tidak bawa Token." });
  }

  // Token biasanya dikirim berformat: "Bearer eyJhbGci..."
  // Kita pisahkan (split) spasi untuk mengambil bagian tokennya saja
  const token = headerAuth.split(' ')[1];

  try {
    // 2. Cek keaslian Tanda Tangan JWT menggunakan Kunci Rahasia Server
    const dataDecoded = jwt.verify(token, process.env.JWT_SECRET);
    
    // 3. Titipkan data ID pengguna (dari Payload) ke dalam Request
    // agar bisa dipakai oleh fungsi selanjutnya!
    req.userAuth = dataDecoded;
    
    // 4. Silakan lewat!
    next();
  } catch (error) {
    return res.status(401).json({ pesan: "Token palsu atau sudah kadaluarsa!" });
  }
}

Menempelkan Satpam di Pintu Route Rahasia

Sekarang, bagaimana cara memakai Satpam tadi? Cukup sisipkan nama fungsinya DI TENGAH-TENGAH (sebelum arrow function) pada rute yang ingin kamu kunci.

// Perhatikan posisi kata 'verifikasiToken'
app.get('/api/profil-rahasia', verifikasiToken, async (req, res) => {
  
  // KITA TAHU PASTI SIAPA YANG LOGIN BERKAT SATPAM TADI!
  // Ingat kita menitipkan data di req.userAuth?
  const userId = req.userAuth.userId;

  // Ambil data sensitif dari Database
  const dataProfil = await prisma.user.findUnique({ 
    where: { id: userId } 
  });

  res.json({
    pesan: "Selamat datang di area rahasia",
    profil: dataProfil.nama
  });
});

Pengujian di Postman

Jika kamu langsung menembak /api/profil-rahasia lewat Postman, kamu akan ditolak (Error 403). Kamu harus meng-copy Token dari proses Login sebelumnya, lalu memasukkannya ke tab Authorization di Postman (Pilih tipe Bearer Token), barulah kamu bisa masuk!

Selamat! 🎉
Kamu baru saja menyelesaikan seluruh alur (Full Lifecycle) Backend Development: dari inisialisasi Server, membuat *Database*, *Routing* CRUD, Hashing Password, hingga Autentikasi JWT yang siap dipakai untuk aplikasi level *Production*!

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates