Autentikasi JWT di Node.js: Tutorial Lengkap + Contoh Kode

JSON Web Token (JWT) adalah salah satu metode autentikasi paling populer untuk aplikasi web modern. JWT memungkinkan server mengeluarkan token unik yang dapat digunakan klien untuk mengakses endpoint terproteksi tanpa harus mengirimkan kredensial setiap kali. Artikel ini akan membahas konsep JWT, cara mengintegrasikannya dengan Node.js, serta contoh kode untuk membuat sistem autentikasi sederhana.
Autentikasi menjadi salah satu aspek terpenting dalam pengembangan aplikasi. Dengan JWT, proses autentikasi menjadi lebih aman dan fleksibel, terutama untuk aplikasi single-page, mobile apps, dan API berbasis REST. Node.js, dengan arsitektur non-blocking dan event-driven, menjadi platform ideal untuk mengimplementasikan JWT.
Prasyarat
- 🖥️ Node.js dan NPM terinstal di sistem.
- 📚 Pengetahuan dasar JavaScript dan Express.
- 📝 Text editor seperti VS Code.
Inisialisasi Proyek
Buat folder proyek baru dan instal dependensi:
mkdir jwt-auth cd jwt-auth npm init -y npm install express jsonwebtoken body-parser bcryptjs
Membuat Server dan Endpoint
Buat file server.js
dengan kode berikut:
const express = require('express'); const bodyParser = require('body-parser'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs');
const app = express();
const port = 3000;
const SECRET_KEY = 'secret123'; // ganti dengan secret yang lebih aman
app.use(bodyParser.json());
// Simulasi database sederhana
let users = [];
// Register user baru
app.post('/register', async (req, res) => {
const { username, password } = req.body;
const hashedPassword = await bcrypt.hash(password, 10);
users.push({ username, password: hashedPassword });
res.json({ message: 'User berhasil didaftarkan ✅' });
});
// Login user
app.post('/login', async (req, res) => {
const { username, password } = req.body;
const user = users.find(u => u.username === username);
if (!user) return res.status(400).json({ message: 'User tidak ditemukan ❌' });
const isPasswordValid = await bcrypt.compare(password, user.password);
if (!isPasswordValid) return res.status(400).json({ message: 'Password salah ❌' });
const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
res.json({ message: 'Login sukses ✅', token });
});
// Middleware verifikasi JWT
const authenticateJWT = (req, res, next) => {
const authHeader = req.headers.authorization;
if (authHeader) {
const token = authHeader.split(' ')[1];
jwt.verify(token, SECRET_KEY, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
} else {
res.sendStatus(401);
}
};
// Endpoint terlindungi
app.get('/protected', authenticateJWT, (req, res) => {
res.json({ message: Halo ${req.user.username}, Anda memiliki akses ke data ini 🔒 });
});
app.listen(port, () => console.log(Server berjalan di http://localhost:${port}));
Penjelasan Kode
- 📝 Register: Menyimpan user dengan password terenkripsi menggunakan bcryptjs.
- 🔑 Login: Memverifikasi user dan password, lalu mengeluarkan token JWT.
- 🔒 Middleware: Memverifikasi token JWT sebelum memberikan akses ke endpoint yang dilindungi.
Struktur Folder Proyek
File/Folder | Keterangan |
---|---|
server.js | File utama aplikasi Node.js + Express dengan JWT |
package.json | Informasi proyek dan dependensi |
node_modules | Folder pustaka dari NPM |
Kesimpulan
JWT merupakan metode autentikasi yang aman, fleksibel, dan sangat cocok untuk API modern. Dengan Node.js dan Express, Anda dapat membangun sistem autentikasi dengan register, login, dan proteksi endpoint secara mudah. Selanjutnya, Anda bisa mengembangkan aplikasi ini dengan database nyata seperti MongoDB atau MySQL, menambahkan refresh token, dan fitur manajemen user lebih lengkap.
Belum ada Komentar untuk "Autentikasi JWT di Node.js: Tutorial Lengkap + Contoh Kode"
Posting Komentar