Friday, March 8, 2024

Membangun Sistem Login dengan JWT di Node.js

Filled under:

 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. 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. 1. Buat file baru bernama index.js di root proyek Anda.

    2. 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. 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. 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. 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!

0 Comments:

Post a Comment