Back to blog
Security

Cara Membuat Fitur Lupa Password (Reset Password) yang Aman

User lupa passwordnya? Jangan pernah membuat tombol yang mengirimkan password asli mereka ke email! Itu adalah kejahatan siber. Ini arsitektur yang benar.

super admin·22 Juni 2026·2 min read
Cara Membuat Fitur Lupa Password (Reset Password) yang Aman
Article Content

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