Back to blog
Backend

Membuat Fitur Login API: Verifikasi Password dan Generate JWT

Waktunya mempraktikkan teori JWT. Kita akan membuat pintu masuk (Endpoint Login) yang akan mencetak dan menyerahkan KTP Digital kepada pengguna yang lolos.

super admin·30 Juni 2026·2 min read
Membuat Fitur Login API: Verifikasi Password dan Generate JWT
Article Content

Saatnya Pengecekan Kredensial

Di artikel Part 7, kita sudah berhasil membuat fitur Register (menyimpan password Bcrypt). Kini kita buat fitur POST /api/login.

Pertama, install *library* JWT-nya di terminal: npm install jsonwebtoken.

Kedua, buka file .env milikmu, dan tambahkan sebuah kata sandi rahasia yang super rumit untuk membubuhkan tanda tangan (Signature). Bebas ketik apa saja.
JWT_SECRET="KucingL0mp4t_BintangJ4tuh_99!!"

Menulis Endpoint Login

Tambahkan kode ini ke dalam file index.js-mu:

const jwt = require('jsonwebtoken'); // Panggil di atas

app.post('/api/login', async (req, res) => {
  const { email, passwordInput } = req.body;

  // 1. Cari apakah email ini ada di Database?
  const user = await prisma.user.findUnique({ where: { email: email } });
  
  if (!user) {
    return res.status(401).json({ pesan: "Email tidak ditemukan!" });
  }

  // 2. Bandingkan Password Ketikan dengan Password Sampah di Database
  // Perintah ini akan menghasilkan True atau False
  const isPasswordBenar = await bcrypt.compare(passwordInput, user.password);

  if (!isPasswordBenar) {
    return res.status(401).json({ pesan: "Password salah!" });
  }

  // 3. JIKA LOLOS, BUATKAN TOKEN JWT!
  // Masukkan data ID pengguna ke dalam tas Payload
  const payload = { userId: user.id };
  
  // Tanda tangani dengan Secret Key dari .env, aktif selama 1 Jam
  const token = jwt.sign(payload, process.env.JWT_SECRET, {
    expiresIn: '1h' 
  });

  // Serahkan Token ini kepada Frontend (Browser/React)
  res.json({
    pesan: "Berhasil Login!",
    token: token
  });
});

Alur Kerja yang Terjadi

  1. Saat Budi mengetik rahasia123, fungsi bcrypt.compare akan bekerja keras. Ia mengambil Hash ($2b$10...) dari *database*, lalu mengkalkulasinya ulang. Jika hasilnya cocok, Budi lulus!
  2. Fungsi jwt.sign akan merakit KTP Digital tersebut.
  3. Token itu (eyJhb...) dikembalikan sebagai Response JSON. (Di aplikasi nyata, *Frontend* akan menyimpannya ke Cookie atau State).

Pintu Login sudah selesai! Tapi, KTP Digital ini buat apa? Di artikel terakhir, kita akan membuat Satpam (Middleware) yang menagih KTP ini untuk fitur rahasia.

Mau langsung pakai template?

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

Browse Templates