SumoRouter
Bikin Frontend Sendiri

Alur Login

Cek metode login yang aktif

Code
GET /api/auth/methods

Mengembalikan apakah email/password, Google, dan pendaftaran aktif, serta site key Cloudflare Turnstile jika captcha diaktifkan (kirim hasilnya sebagai turnstile_token).

Register

Code
POST /api/auth/register { "email": "budi@contoh.com", "password": "min-8-karakter", "name": "Budi", "referral_code": "opsional" }
  • Jika verifikasi email aktif → { "verification_required": true, "email": "..." }. User menerima email berisi kode 6 digit dan link.
  • Jika tidak → langsung { "token": "<jwt>" }.

Verifikasi email

Code
POST /api/auth/verify-email { "email": "budi@contoh.com", "code": "123456" } // dari kode { "token": "<token dari link email>" } // atau dari link

Respons { "verified": true, "token": "<jwt>" } (user langsung masuk). Untuk akun dengan 2FA, token tidak ada: lanjutkan dengan login biasa. Kirim ulang email: POST /api/auth/resend-verification.

Login

Code
POST /api/auth/login { "email": "budi@contoh.com", "password": "..." }

Ada tiga kemungkinan respons:

ResponsLangkah berikutnya
{ "token": "..." }Selesai. Pakai sebagai Authorization: Bearer.
{ "verification_required": true }Email belum diverifikasi.
{ "mfa": { "token": "...", "setup": false } }Minta kode authenticator, kirim ke /api/auth/mfa/verify.
{ "mfa": { "token": "...", "setup": true } }Admin yang belum punya 2FA: panggil /api/auth/mfa/setup dulu untuk QR code.
Code
POST /api/auth/mfa/verify { "mfa_token": "<mfa.token>", "code": "123456" }

code boleh kode 6 digit atau salah satu recovery code. Respons { "token": "..." }; saat enrolment pertama juga berisi recovery_codes yang harus ditampilkan ke user sekali.

Google sign-in

Arahkan browser ke GET /api/auth/google/start. Setelah login di Google, SumoRouter me-redirect ke {PUBLIC_URL}/auth/callback dengan hasil di fragment URL:

  • #token=<jwt>: berhasil.
  • #mfa=<mfa_token>&setup=<true|false>: lanjutkan ke langkah 2FA di atas.
  • /login?error=<kode>: gagal.

Karena redirect selalu ke PUBLIC_URL instance, Google sign-in di frontend dengan domain lain butuh halaman /auth/callback di domain tersebut (self-host dengan PUBLIC_URL milikmu).

Lupa password

Code
POST /api/auth/forgot-password { "email": "..." } POST /api/auth/reset-password { "token": "<dari link email>", "password": "..." }

Reset password tidak otomatis login dan mengakhiri semua sesi lama.

Last modified on