JWT (Json Web Token)
@gaman/jwt adalah plugin untuk mengintegrasikan keamanan berbasis JSON Web Token (JWT) pada framework GamanJS.
Plugin ini memungkinkan Anda menambahkan autentikasi berbasis token dengan mudah.
Install
Section titled “Install”GamanJS adalah kerangka kerja untuk aplikasi backend. Anda dapat menginstal plugin menggunakan manajer paket favorit Anda:
npm install @gaman/jwtpnpm install @gaman/jwtyarn install @gaman/jwtbun install @gaman/jwtCara Pakai
Section titled “Cara Pakai”Berikut contoh implementasi @gaman/jwt pada aplikasi GamanJS:
import { jwt } from "@gaman/jwt";
defineBootstrap((app) => { app.mount( jwt({ secret: "secret", header: "Authorization", required: false, includes: ["/jwt/unprotected", "/jwt/token"], }), jwt({ secret: "secret", header: "Authorization", required: true, includes: ["/jwt/protected"], excludes: ["/jwt/unprotected", "/jwt/token"], }), );
// mount route lainnya di sini});Kode di atas menghasilkan:
/jwt/unprotecteddan/jwt/tokentidak dilindungi (bebas diakses)/jwt/protecteddilindungi dan membutuhkan headerAuthorizationberisi token yang valid
Membuat Controller untuk Login
Section titled “Membuat Controller untuk Login”Untuk membuat endpoint login dan testing JWT, Anda dapat membuat controller seperti berikut:
import { composeController, Res } from "@gaman/core";
export default composeController(() => ({ // endpoint untuk generate token Token: async (ctx) => { const { username, password } = await ctx.req.json();
// validasi sederhana if (username !== "admin" || password !== "123456") { return Res.json({ message: "invalid credentials" }, { status: 401 }); }
const token = ctx.jwt.sign( { user: { username } }, { secret: "secret", expiresIn: "1h" }, ); return Res.json({ token }); },
// endpoint yang dilindungi Protected: (ctx) => { return Res.json({ message: "Access granted", user: ctx.jwt?.user, }); },
// endpoint bebas akses Unprotected: () => { return Res.json({ message: "Public route" }); },}));Daftarkan Controller ke Router
Section titled “Daftarkan Controller ke Router”Tambahkan controller di dalam routing Anda:
import { autoComposeRoutes } from "@gaman/core";import { JwtController } from "../controllers/JwtController.ts";
export default autoComposeRoutes((route) => { route.group("/jwt", (route) => { route.post("/token", [JwtController, "Token"]); route.get("/protected", [JwtController, "Protected"]); route.get("/unprotected", [JwtController, "Unprotected"]); });});Uji Coba
Section titled “Uji Coba”-
Kirim
POST /jwt/tokendengan body:{"username": "admin","password": "123456"}akan mengembalikan token JWT.
-
Gunakan token di header:
Authorization: Bearer <token> -
Akses
/jwt/protected→ akan menampilkan data user dari token. -
Akses
/jwt/unprotected→ bisa diakses tanpa token.