
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
- Saat Budi mengetik
rahasia123, fungsibcrypt.compareakan bekerja keras. Ia mengambil Hash ($2b$10...) dari *database*, lalu mengkalkulasinya ulang. Jika hasilnya cocok, Budi lulus! - Fungsi
jwt.signakan merakit KTP Digital tersebut. - 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