stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-06
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 6: Pengembangan halaman login interaktif dengan validasi dan pengamanan
Mata Kuliah Lab Pemrograman • Bisnis Digital

Halaman Login Interaktif

Pertemuan 6 — Validasi dan Pengamanan Dasar

Setelah menguasai state dan props pekan lalu, hari ini kita pakai keduanya untuk kasus paling sering ditemui pada aplikasi bisnis digital: halaman login — lengkap dengan aturan validasi dan langkah pengamanan dasar.

RPS MINGGU 6 • 2X50 MENIT

Tujuan Pembelajaran Hari Ini

Melanjutkan konsep state dan props dari Pertemuan 5, hari ini Anda membangun halaman login yang fungsional dan aman:

CAPAIAN 1 — VALIDASI
MEMVALIDASI INPUT
Menerapkan aturan validasi format email dan panjang kata sandi sebelum data dikirim ke server.
CAPAIAN 2 — PENGAMANAN
MENGAMANKAN DATA
Menerapkan langkah pengamanan dasar: penyembunyian kata sandi, larangan simpan teks polos, dan koneksi terenkripsi.
Sub-CPMK Minggu 6: mahasiswa mampu mengembangkan halaman login interaktif dengan validasi dan pengamanan dasar menggunakan React Native.
Bagian 1 dari 3
Membangun Formulir Login dengan State
Setiap ketikan pengguna di kolom email dan kata sandi perlu "diingat" komponen — di sinilah state kembali berperan.

Analogi: Formulir Kertas vs Formulir Digital Terpantau

FORMULIR KERTAS
TIDAK TERPANTAU
Petugas hanya membaca isian saat formulir diserahkan di akhir. Sistem tidak tahu apa yang sedang Anda tulis selagi Anda menulis.
FORMULIR DIGITAL LOGIN
TERPANTAU REAL-TIME
Setiap huruf yang diketik langsung tersimpan di state, sehingga aplikasi bisa langsung memvalidasi — misalnya memberi tanda merah begitu format email salah.
Glosarium — komponen terkontrol (controlled component): komponen input yang nilainya sepenuhnya diatur oleh state React Native, bukan disimpan sendiri oleh komponen input tersebut.

Membuat State untuk Email & Kata Sandi

Dua kolom login butuh dua state terpisah, masing-masing dibuat dengan useState:

// State untuk menyimpan ketikan pengguna
const [email, setEmail] = useState('');
const [sandi, setSandi] = useState('');
email / setEmail
Menyimpan teks yang diketik di kolom email, nilai awal string kosong ''.
sandi / setSandi
Menyimpan teks yang diketik di kolom kata sandi, nilai awal string kosong ''.

Menghubungkan State ke TextInput

<TextInput
  placeholder="Email"
  value={email}
  onChangeText={(teks) => setEmail(teks)}
/>
<TextInput
  placeholder="Kata Sandi"
  value={sandi}
  onChangeText={(teks) => setSandi(teks)}
  secureTextEntry={true}
/>
Glosarium — secureTextEntry: properti bawaan TextInput yang menyembunyikan karakter yang diketik pengguna, ditampilkan sebagai titik atau bintang — langkah pengamanan paling dasar pada kolom kata sandi.

Hitung dari Nol: Melacak Panjang Kata Sandi

Syarat minimal kata sandi adalah 8 karakter. Mari lacak nilai sandi.length saat pengguna mengetik bertahap.

LangkahPerhitunganPanjang sandi
Ketik "sandi"s-a-n-d-i = 5 karakter5
Tambah "123"5 + 3 karakter8
Uji syarat minimal8 ≥ 8valid = true
Tambah simbol "!"8 + 1 karakter9
HASIL AKHIR
9 ≥ 8
"sandi123!" memenuhi syarat panjang minimal — tombol masuk boleh aktif

Walkthrough: Tombol Masuk Aktif atau Tidak

Tombol "Masuk" sebaiknya hanya bisa ditekan kalau semua syarat validasi terpenuhi — mencegah pengguna mengirim data yang jelas salah.

const formValid = email.includes('@') && sandi.length >= 8;
<Button title="Masuk" disabled={!formValid} onPress={handleLogin} />
KONDISI 1 — BELUM VALID
email = "budi" (tanpa "@"), sandi = "123" (3 karakter) → formValid = false → tombol nonaktif (abu-abu).
KONDISI 2 — VALID
email = "budi@toko.id", sandi = "sandi123" → formValid = true → tombol aktif dan bisa ditekan.
Bagian 2 dari 3
Validasi — Menyaring Input Sebelum Dikirim
Bukan sekadar mengaktifkan tombol, validasi juga memberi tahu pengguna dengan tepat apa yang perlu diperbaiki.

Aturan Validasi Formulir Login

VALIDASI EMAIL
Harus mengandung tanda "@" dan domain (mis. ".com", ".id") menggunakan pola regex sederhana.
VALIDASI KATA SANDI
Minimal 8 karakter, disarankan mengandung huruf besar, angka, dan simbol agar lebih sulit ditebak.
Glosarium — regex (regular expression): pola teks yang dipakai untuk mencocokkan format string tertentu, misalnya memastikan sebuah teks berbentuk alamat email yang sah.

Menulis Fungsi Validasi

// Pola regex sederhana untuk format email
const polaEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

function validasiForm() {
  if (!polaEmail.test(email)) return "Format email tidak valid";
  if (sandi.length < 8) return "Kata sandi minimal 8 karakter";
  return ""; // kosong artinya tidak ada kesalahan
}
Fungsi ini dipanggil setiap kali pengguna menekan tombol "Masuk" atau setiap ketikan berubah, hasilnya disimpan di state pesanError.

Hitung dari Nol: Skor Kekuatan Kata Sandi

Kata sandi "Toko0102!" diuji dengan 4 kriteria kekuatan. Tiap kriteria terpenuhi bernilai 1 poin.

KriteriaPemeriksaanPoin
Panjang minimal 89 karakter ≥ 81
Ada huruf besar"T" pada "Toko"1
Ada angka"0102" terdeteksi1
Ada simbol"!" terdeteksi1
SKOR TOTAL
4 dari 4
1 + 1 + 1 + 1 = 4 → kategori "Kata Sandi Kuat"

Coba Sendiri: Uji Kekuatan Kata Sandi Anda

Ketik beberapa kata sandi berbeda, lalu amati bagaimana skor kekuatan dan entropinya berubah.

Menampilkan Pesan Kesalahan secara Kondisional

const [pesanError, setPesanError] = useState('');

<TextInput value={email} onChangeText={...} />
{pesanError !== '' && (
  <Text style={{color: 'red'}}>{pesanError}</Text>
)}
Glosarium — rendering kondisional: teknik menampilkan elemen JSX hanya jika suatu kondisi bernilai benar, memakai operator && — elemen di sisi kanan hanya muncul jika sisi kiri bernilai true.
Bagian 3 dari 3
Pengamanan Dasar Halaman Login
Validasi menjaga data masuk rapi, tapi pengamanan menjaga data pengguna tidak bocor.

Tiga Prinsip Pengamanan yang Wajib Diterapkan

1. SEMBUNYIKAN SANDI
secureTextEntry aktif di kolom kata sandi, mencegah "pengintipan bahu" (shoulder surfing) saat pengguna mengetik di tempat umum.
2. JANGAN SIMPAN TEKS POLOS
Kata sandi tidak pernah disimpan mentah di state jangka panjang atau database — server harus melakukan hashing sebelum menyimpannya.
3. KONEKSI TERENKRIPSI
Data login dikirim lewat HTTPS (bukan HTTP biasa) agar tidak bisa disadap saat melintasi jaringan.
Glosarium — hashing: proses mengubah kata sandi menjadi kode acak satu-arah yang tidak bisa dikembalikan ke teks aslinya, dilakukan di sisi server sebelum disimpan ke database.

Alur Data: Dari Ketikan hingga Server

TextInputemail, sandi (state)validasiForm()cek regex & panjangTombol Masukaktif jika formValidHTTPSkoneksi terenkripsiServerhashing & cocokkankirim data loginRespons: berhasil / tolak

Kesalahan Umum Pemula pada Halaman Login

KESALAHAN 1
Lupa secureTextEntry pada kolom kata sandi, sehingga karakter tampil jelas dan bisa terbaca orang di sekitar pengguna.
KESALAHAN 2
Validasi hanya di aplikasi (client-side) tanpa validasi ulang di server — pengguna jahat bisa melewati aplikasi dan mengirim data langsung ke server.
Ingat: validasi di aplikasi mobile hanya untuk kenyamanan pengguna; validasi di server tetap wajib karena aplikasi bisa "dilewati" oleh pihak yang tahu cara mengaksesnya langsung.

Latihan Praktik (30 Menit)

Bangun halaman Login untuk aplikasi UMKM proyek Anda dengan ketentuan berikut:

Instruksi
  • Buat state email dan sandi, hubungkan ke dua TextInput terkontrol.
  • Aktifkan secureTextEntry pada kolom kata sandi.
  • Tulis fungsi validasiForm(): email wajib mengandung "@", sandi minimal 8 karakter.
  • Tampilkan pesan error secara kondisional, dan tombol "Masuk" hanya aktif jika form valid.
Kerjakan berpasangan di Expo Go. Dosen akan berkeliling untuk memeriksa hasil dan menjawab pertanyaan.

Rangkuman Konsep Kunci

VALIDASI
SARING INPUT
Regex untuk format email, cek panjang untuk kata sandi, pesan error ditampilkan secara kondisional.
PENGAMANAN
LINDUNGI DATA
secureTextEntry, hashing di server, dan koneksi HTTPS — tiga lapis pertahanan dasar.
Validasi menjaga kualitas data yang masuk; pengamanan menjaga kerahasiaan data pengguna. Halaman login yang baik butuh keduanya sekaligus.

Penutup & Tugas Mandiri

Tugas Sebelum Pertemuan 7
  • Selesaikan halaman Login dari latihan praktik, unggah ke repository proyek masing-masing.
  • Tambahkan validasi tambahan: konfirmasi kata sandi (kolom kedua) harus sama persis dengan kolom pertama.
  • Baca ulang glosarium regex, hashing, dan HTTPS sebagai bekal diskusi navigasi Pertemuan 7.
Pertemuan 7 kita akan menyambungkan halaman login ini ke navigasi antarhalaman — setelah login berhasil, pengguna otomatis berpindah ke halaman beranda.