FluentStack

Login/Register UX

Mode tersedia: dark, light, paper
MasukDaftar
Advanced · Level 11: Production Next.jsAdvanced60 menitBahasa Indonesia

Login/Register UX

Mendesain form login dan register yang menjelaskan status submit, kesalahan, dan langkah berikutnya dengan jelas.

StatusMemuat progres
ProgresMemuat...

...

Memuat progres

Menyiapkan langkah berikutnya

Tujuan belajar

  • Membedakan authentication, session management, dan authorization
  • Menyusun field serta label form login yang mudah dipahami
  • Menampilkan status submitting dan error tanpa membuat user menebak
  • Menentukan kapan login dan register perlu dipisahkan
Next.jsAuthenticationFormsUXAccessibility

Isi lesson

6 blok
  1. 1.
    Auth dimulai dari alur yang dapat dipahami userBelum selesaiWajib
  2. 2.
    Struktur login form dengan state yang terlihatBelum selesaiWajib
  3. 3.
    Coding practiceBelum selesaiWajib
  4. 4.
    Cek pemahamanBelum selesaiWajib
  5. 5.
    Form bukan tempat menyimpan atau memeriksa password sendiriBelum selesaiWajib
  6. 6.
    RingkasanBelum selesaiWajib

Auth dimulai dari alur yang dapat dipahami user

Wajib

Authentication membuktikan identitas user, session management menyimpan keadaan user tersebut di antara request, dan authorization menentukan route atau data yang boleh diakses. Tiga hal ini berhubungan, tetapi tidak sama. Pada module ini, mulailah dari UI: user harus tahu apakah ia sedang masuk, sedang mendaftar, menunggu respons, atau perlu memperbaiki input.

Jangan membuat satu form dengan tombol yang ambigu seperti "Lanjutkan" tanpa konteks. Untuk flow email/password sederhana, pisahkan tujuan login dan register dengan heading, tombol, serta link perpindahan yang jelas. Jika register memerlukan konfirmasi email, beri tahu user bahwa langkah berikutnya terjadi di inbox, bukan membuatnya mengira akun langsung aktif.

Bagian ini memengaruhi progres lesson.

Struktur login form dengan state yang terlihat

Wajib
tsx
type LoginFormState = {
  status: "idle" | "submitting" | "error";
  message?: string;
};

const state: LoginFormState = {
  status: "error",
  message: "Email atau password belum sesuai. Coba periksa kembali.",
};

export default function LoginForm() {
  const isSubmitting = state.status === "submitting";

  return (
    <form aria-describedby={state.message ? "login-error" : undefined}>
      <h1>Masuk ke akun</h1>

      <label htmlFor="email">Email</label>
      <input id="email" name="email" type="email" autoComplete="email" />

      <label htmlFor="password">Password</label>
      <input
        id="password"
        name="password"
        type="password"
        autoComplete="current-password"
      />

      {state.message ? (
        <p id="login-error" role="alert">
          {state.message}
        </p>
      ) : null}

      <button type="submit" disabled={isSubmitting}>
        {isSubmitting ? "Memeriksa akun..." : "Masuk"}
      </button>
    </form>
  );
}

Contoh ini memisahkan tiga state yang user perlu lihat: idle, submitting, dan error. Label terhubung ke input lewat htmlFor dan id. Error diberi role alert sehingga perubahan penting tidak hanya bergantung pada warna. Dalam app nyata, state dapat datang dari Server Action atau auth provider; contoh ini hanya menunjukkan struktur UI, bukan pemeriksaan password di browser.

Bagian ini memengaruhi progres lesson.

Coding practice

WajibDibuka di workspace khusus

Build auth login form states

Lengkapi component login form yang memiliki label, state submitting, dan pesan error yang dapat dipahami user.

Tujuan awal: Fokus di tab TSX.

Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.

Tombol selesai aktif setelah semua validasi wajib lolos.

7 cek otomatis5 checklist
Belum selesaiBuka practice

Cek pemahaman

WajibJawab dulu

Cek pemahaman singkat

Apa tindakan paling membantu saat login request sedang diproses?

Progres lesson naik setelah jawaban benar.

Catatan penting

Wajib

Form bukan tempat menyimpan atau memeriksa password sendiri

UI hanya menangkap input dan menampilkan state. Pemeriksaan kredensial, pembuatan session, dan penyimpanan cookie harus ditangani di server atau oleh auth provider. Jangan menyimpan password di localStorage, menulis password ke console, atau membuat validasi client sebagai satu-satunya pemeriksaan keamanan.

Bagian ini memengaruhi progres lesson.

Ringkasan

Wajib
  • Authentication, session management, dan authorization memiliki peran yang berbeda.
  • Login/register UX harus menjelaskan tujuan form, state submit, dan langkah setelah berhasil atau gagal.
  • Label, autocomplete, dan error yang jelas membuat auth form lebih mudah digunakan.
  • Password dan session tidak diproses sebagai state browser biasa.
  • Berikutnya, kamu akan memakai session untuk mengubah navigation yang dilihat user.

Bagian ini memengaruhi progres lesson.

Langkah berikutnya

Selesaikan bagian penting lesson ini

Lanjutkan blok wajib berikutnya: Auth dimulai dari alur yang dapat dipahami user.