
Jangan Mengirim Password Asli!
Seorang pengguna menekan tombol "Lupa Kata Sandi". Jika *Backend*-mu dirancang untuk mencari password di database lalu mengirimkan teks password tersebut ke Email pengguna, Berhentilah sekarang juga!
Seperti yang kita bahas di artikel Hashing Bcrypt, *password* di database sudah diacak menjadi bentuk (Hash) yang tidak bisa dikembalikan ke teks aslinya. Jika kamu bisa mengirimkan *password* asli ke email, itu membuktikan sistem keamananmu gagal total. Cara yang benar di industri adalah membuat sistem Reset Password (Ganti Baru).
Alur (Flow) Keamanan Reset Password
Inilah arsitektur standar yang dipakai oleh Google, Facebook, dan perusahaan raksasa lainnya:
Langkah 1: User Memasukkan Email
Di halaman *Frontend*, pengguna memasukkan Email mereka. *Backend* mengecek apakah email itu ada di database. Jika ada, Backend akan membuat (Generate) sebuah Token Rahasia Acak yang sangat panjang (misal: 7f8a9b...).
Langkah 2: Simpan Token di Database (PENTING)
Backend wajib menyimpan Token tersebut di tabel database (misal tabel password_resets), lengkap dengan Email pemiliknya dan Waktu Kedaluwarsa (Expired At). Beri waktu maksimal 15-30 menit agar *link* tersebut tidak bisa disalahgunakan *hacker* besok harinya.
Langkah 3: Kirim Link ke Email Pengguna
Backend mengirim email otomatis menggunakan layanan SMTP (seperti SendGrid atau Nodemailer) berisi tautan (URL) unik yang mengandung token tadi.
Misal: https://toko.com/reset-password?token=7f8a9b...
Langkah 4: Validasi di Halaman Reset
Saat pengguna mengklik *link* di emailnya, ia dibawa ke halaman *Frontend* yang menampilkan form "Masukkan Password Baru". Saat form di-*submit*, *Frontend* akan menembak API beserta *Password Baru* DAN Token dari URL tadi.
Langkah 5: Eksekusi Penggantian di Server
Backend menerima API tersebut. Backend lalu melihat Token-nya dan bertanya ke Database: "Apakah token 7f8a9b... ini ada? Apakah umurnya belum 15 menit?"
Jika aman, Backend akan mengubah (Update) baris *password* pengguna dengan *Hash Bcrypt* yang baru, dan langsung MENGHAPUS token tersebut dari tabel password_resets agar *link* email tadi tidak bisa diklik dua kali. Akun kembali aman!
Mau langsung pakai template?
Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.
Browse Templates