🔐 Authentication & Session

Level: Advanced

Authentication adalah proses memverifikasi identitas pengguna (login). Session adalah cara menyimpan status login agar pengguna tetap dikenali di setiap request. Bayangkan authentication seperti pemeriksaan tiket di bioskop, dan session adalah stempel tangan yang membuktikan kamu sudah lolos pemeriksaan.

📖 Konsep Utama

🔹 Contoh Session dengan Express

// app.js
const express = require("express");
const session = require("express-session");
const app = express();

app.use(express.json());
app.use(session({
  secret: "rahasia",
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false } // true jika pakai HTTPS
}));

// Login sederhana
app.post("/login", (req, res) => {
  const { username, password } = req.body;
  if (username === "admin" && password === "1234") {
    req.session.user = username;
    res.send("Login berhasil");
  } else {
    res.status(401).send("Login gagal");
  }
});

// Route proteksi
app.get("/dashboard", (req, res) => {
  if (req.session.user) {
    res.send(`Selamat datang ${req.session.user}`);
  } else {
    res.status(403).send("Harus login dulu");
  }
});

app.listen(3000, () => console.log("Server jalan di http://localhost:3000"));

🔹 Contoh JWT

const jwt = require("jsonwebtoken");

// Membuat token
const token = jwt.sign({ user: "admin" }, "rahasia", { expiresIn: "1h" });

// Verifikasi token
jwt.verify(token, "rahasia", (err, decoded) => {
  if (err) console.log("Token tidak valid");
  else console.log(decoded.user);
});

🛠️ Praktik Kecil

Buat server Express dengan route /login dan /dashboard. Gunakan express-session untuk menyimpan status login. Uji dengan mengirim request login, lalu akses dashboard.

🎮 Mini Challenge

Buat sistem login dengan fitur:

Tugas tambahan: Implementasikan versi JWT untuk API, dengan middleware yang memverifikasi token sebelum mengakses route tertentu.