Login/Register UX
Mendesain form login dan register yang menjelaskan status submit, kesalahan, dan langkah berikutnya dengan jelas.
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
Isi lesson
6 blok- 1.Auth dimulai dari alur yang dapat dipahami userBelum selesaiWajib
- 2.Struktur login form dengan state yang terlihatBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.Form bukan tempat menyimpan atau memeriksa password sendiriBelum selesaiWajib
- 6.RingkasanBelum selesaiWajib
Auth dimulai dari alur yang dapat dipahami user
WajibAuthentication 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
Wajibtype 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 khususBuild 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.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Apa tindakan paling membantu saat login request sedang diproses?
Progres lesson naik setelah jawaban benar.
Catatan penting
WajibForm 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.