Skip to main content
Autentikasi memakai Better Auth dengan email/password. Session disimpan di Postgres; di production cookie secure + CSRF protection.

Stack auth

Kode: apps/api/src/auth/better-auth.ts, auth.middleware.ts, roles.ts

Peran

Role di DBDinormalisasiAkses
adminadmin/admin/*, semua operasi admin
user atau kosongpesertaWorkspace, kelas, AI hub
lainnyaditolak403 Forbidden
Middleware requireRole(['admin']) atau requireRole(['peserta']) dipasang per route. Frontend: AdminRoute vs UserRoute di apps/web/src/routes/.

Flow login biasa

Auto-login setelah pembayaran

Saat peserta bayar lewat Scalev, mereka belum punya session. Flow claim membuat session otomatis: Field terkait: payment_sessions.sign_in_token, sign_in_token_expiry. Kalau token gagal/expired, UI fallback ke login manual (requiresLogin: true).

Registrasi publik

POST /api/payment/register (dari /register/:batchSlug/:tierSlug):
  1. Validasi batch open + tier aktif
  2. Provision user Better Auth (email + password)
  3. Buat peserta + enrollment pending
  4. Buat payment_session + order Scalev

Bearer token

Plugin bearer() aktif — API menerima Authorization: Bearer <token> untuk client non-browser.
Token tidak dibaca dari query string (dihapus untuk keamanan — hindari kebocoran via log/referrer).

Email terkait auth

EventProvider
Reset passwordResend (jika RESEND_API_KEY set)
Verifikasi emailResend (opsional)
Invite peserta adminemail.service.ts templates

Env

BETTER_AUTH_SECRET=...          # min 32 char
BETTER_AUTH_URL=https://app.../api/auth
FRONTEND_URL=https://app...

Halaman terkait