Pada era digital saat ini, keamanan menjadi salah satu aspek terpenting dalam pengembangan aplikasi web. JSON Web Token (JWT) menawarkan solusi elegan untuk mengelola autentikasi dan otorisasi pengguna. Tutorial ini akan membimbing Anda melalui proses pembuatan sistem login menggunakan JWT di Node.js, disajikan dalam Bahasa Indonesia.
Persiapan
Pastikan Anda sudah menginstal Node.js di sistem Anda. Anda dapat memeriksanya dengan menjalankan node -v
di terminal. Jika belum terinstal, silakan unduh dan instal dari situs resmi Node.js (https://nodejs.org/en).
Langkah 1: Membuat Proyek Baru
1. Buka terminal, buat folder baru untuk proyek Anda, dan navigasi ke dalam folder tersebut:
mkdir proyek-login-jwt
cd proyek-login-jwt
2. isialisasi proyek Node.js:
npm init -y
Perintah ini akan menghasilkan file
package.json
yang berisi informasi dasar tentang proyek Anda.Langkah 2: Menginstal Paket yang Dibutuhkan
Untuk proyek ini, kita akan menggunakan beberapa paket:
-express
untuk framework server.-jsonwebtoken
untuk mengelola token JWT.-bcrypt
untuk mengenkripsi password.-dotenv
untuk mengelola variabel lingkungan.
Instal paket-paket tersebut dengan npm:
npm install express jsonwebtoken bcrypt dotenv
Langkah 3: Membuat Server Express
1. Buat file baru bernama
index.js
di root proyek Anda.2. Tambahkan kode berikut untuk mengatur server Express dasar:
require('dotenv').config();
const express = require('express');
const app = express();
app.use(express.json()); // Middleware untuk menguraikan JSON
app.get('/', (req, res) => {
res.send('Selamat Datang di Sistem Login JWT!');
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server berjalan di port ${PORT}`);
});
Langkah 4: Membuat Rute Registrasi
1. Di bawah kode server, tambahkan fungsi untuk registrasi pengguna:
const bcrypt = require('bcrypt');
// Simulasi database sederhana
const users = [];
app.post('/register', async (req, res) => {
try {
const salt = await bcrypt.genSalt();
const hashedPassword = await bcrypt.hash(req.body.password, salt);
const user = { username: req.body.username, password: hashedPassword };
users.push(user);
res.status(201).send('Pengguna berhasil didaftar');
} catch {
res.status(500).send('Terjadi kesalahan pada server');
}
});
Langkah 5: Membuat Rute Login dan Mengeluarkan JWT
1. Tambahkan rute untuk login yang mengeluarkan JWT jika pengguna berhasil terautentikasi:
const jwt = require('jsonwebtoken');
app.post('/login', async (req, res) => {
const user = users.find(u => u.username === req.body.username);
if (user == null) {
return res.status(400).send('Tidak dapat menemukan pengguna');
}
try {
if (await bcrypt.compare(req.body.password, user.password)) {
const accessToken = jwt.sign(user, process.env.ACCESS_TOKEN_SECRET);
res.json({ accessToken: accessToken });
} else {
res.send('Login gagal');
}
} catch {
res.status(500).send('Terjadi kesalahan pada server');
}
});
2. Tambahkan
ACCESS_TOKEN_SECRET
ke file.env
untuk keamanan token JWT:ACCESS_TOKEN_SECRET=rahasia_sangat_rahasia
Langkah 6: Membuat Middleware untuk Verifikasi JWT
1. Buat fungsi middleware untuk memverifikasi token JWT:
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (token == null) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}
2. Gunakan middleware ini pada rute yang ingin Anda lindungi. Misalnya, tambahkan rute
/dashboard
yang memerlukan autentikasi:app.get('/dashboard', authenticateToken, (req, res) => {
res.send('Selamat Datang di Dashboard');
});
Kesimpulan
Anda telah berhasil membuat sistem login menggunakan JWT di Node.js! Meskipun ini hanya contoh dasar, Anda dapat mengembangkannya lebih lanjut dengan menambahkan fitur seperti pengelolaan pengguna, penyimpanan data ke database, dan lainnya. Selamat mencoba dan teruslah belajar!