Lewati ke konten

Middleware Basic Auth

Referensi: MDN HTTP Authentication Guide

Middleware HTTP Basic Authentication untuk melindungi route dengan autentikasi username dan password. Sederhana, aman, dan mudah dikonfigurasi.

Penggunaan Dasar

Lindungi route dengan Basic Auth menggunakan Mware.basicAuth():

typescript
// 1. Import Router dan Mware
import { Router, Mware } from '@neabyte/deserve'

// 2. Buat router
const router = new Router()

// 3. Pasang Basic Auth dengan daftar user (username + password)
router.use(
  Mware.basicAuth({
    users: [
      { username: 'admin', password: 'secret' },
      { username: 'user', password: 'pass' }
    ]
  })
)

// 4. Jalankan server
await router.serve(8000)

Proteksi Route Spesifik

Terapkan Basic Auth hanya pada route tertentu:

typescript
// 1. Basic Auth hanya untuk path /api
router.use(
  '/api',
  Mware.basicAuth({
    users: [{ username: 'admin', password: 'secret' }]
  })
)

// 2. Path /admin dengan user berbeda
router.use(
  '/admin',
  Mware.basicAuth({
    users: [{ username: 'admin', password: 'admin123' }]
  })
)

Beberapa Pengguna

Mendukung beberapa akun pengguna:

typescript
// 1. Array users: tiap item { username, password }
router.use(
  Mware.basicAuth({
    users: [
      { username: 'admin', password: 'admin123' },
      { username: 'user', password: 'user123' },
      { username: 'guest', password: 'guest123' }
    ]
  })
)

Penanganan Error

Basic Auth secara otomatis menggunakan router.catch() jika didefinisikan:

typescript
// 1. Tangkap 401 (unauthorized) dari Basic Auth
router.catch((ctx, { statusCode, error }) => {
  if (statusCode === 401) {
    return ctx.send.json(
      { error: 'Autentikasi diperlukan', message: error?.message ?? 'Unauthorized' },
      { status: 401 }
    )
  }
  return ctx.send.json({
    error: error?.message ?? 'Error tidak diketahui'
  }, { status: statusCode })
})

// 2. Pasang Basic Auth (401 akan masuk router.catch)
router.use(Mware.basicAuth({ users: [...] }))

Autentikasi Di Browser

Browser akan secara otomatis meminta kredensial saat mengakses route yang dilindungi:

Username: admin
Password: ******

Dirilis di bawah Lisensi MIT.