Register, Login, dan Forgoten Password ala Lokomedia (Lanjutan)
Melanjutkan artikel sebelumnya tentang membership sebuah website yang dibangun dengan cms lokomedia. Kali ini kita bahas mengenai modul reset password member dengan menggunakan form email. Dalam script login dan register lokomedia 1.6.1 menggunakan enkripsi sha1 untuk merahasiakan password member. Sehingga kalau kita ingin mengetahui passwor member tentunya harus mendekripsikan kembali data yang ada pada database. Untuk menjaga privasi member, sebaiknya password yang kita kirim ulang adalah password baru dengan menggenerate huruf dan angka untuk membentuk kombinasi password baru tersebut. Mari kita lihat script module form reset password berikut :
elseif($_GET['module']=='lupapassword'){ echo "<div id='content'> <div id='content-detail'>"; echo "<span class=judul_head>»<b>Reset Password</b></a></span><br /><br />"; echo "<b>Kami akan mengirimkan username dan password Anda ke email. Silahkan masukkan email Anda :</b> <table width=100% style='border: 1pt dashed #0000CC;padding: 10px;'> <form action=kirim-password.html method=POST> <tr><td>Email</td><td> : <input type=text name=email size=40></td></tr> </td><td colspan=2><input type=submit name=submit value=Kirim></td></tr> </form></table><br /></div> </div>"; }
Dari script diatas kita hanya menggunakan satu inputan saja yakni email user. Sehingga hanya email valid dan terdaftar dalam databaselah yang akan dieksekusi. Email dalam database tidak diperbolahkan ganda atau satu email tidak boleh digunakan untuk lebih dari satu orang member. Selanjutnya form ini akan mengarahkan ke module kirimpassword berikut :
elseif ($_GET['module']=='kirimpassword'){ echo "<div id='content'> <div id='content-detail'>"; $email=trim($_POST[email]); $cek_akun=mysql_num_rows(mysql_query("SELECT * FROM member WHERE email='$email'")); $nama=mysql_fetch_array(mysql_query("SELECT * FROM member WHERE email='$email'")); $pola_email = "^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3}))$"; if (empty($email)){ echo "Anda belum memasukkan apapun<br /> <a href=javascript:history.go(-1)><b>Ulangi Lagi</b>"; } elseif (!eregi($pola_email,$email)){ echo "Email anda tidak valid<br /> <a href=javascript:history.go(-1)><b>Ulangi Lagi</b>"; } else{ if($cek_akun==1){ function generate_random_string($name_length = 8) { $alpha_numeric = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; return substr(str_shuffle($alpha_numeric), 0, $name_length); } $reset_pass = generate_random_string(); $kepada = "$email"; $judul = "Reset Password Anda"; $dari = "From: noreply@cauza.web.id\r\n"; $dari .= "MIME-Version: 1.0\r\n"; $dari .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; $pesan = "Anda menggunakan fasilitas reset pasword pada situs https://cauza.web.id. Berikut akun yang Anda minta :<br>"; $pesan .= "Username : $nama[username] <br>"; $pesan .= "Password : $reset_pass <br>"; $reset_encrypt = sha1($reset_pass); mail($kepada,$judul,$pesan,$dari); mysql_query("UPDATE member SET password = '$reset_encrypt' WHERE email = '$email'"); echo "<span class=posting>» <b>Reset Password</b></span><br /><br />"; echo "<p align=center><b>Silahkan cek email untuk memeriksa username dan password Anda !<br /><a href='index.php'>Klik untuk kembali ke beranda</a></b></p>"; } else { echo "<span class=posting>» <b>Reset Password</b></span><br /><br />"; echo "<p align=center>Maaf <b>Email</b> anda tidak terdaftar sebagai member kami. <br /><a href='daftar.html'>Buat Akun</a></p>"; } } echo "</div> </div>"; }
Bisa dilihat dalam script tersebut akan menggenerate pasword baru dengan sebuah fungsi, kemudian mengirimkannya ke email user diteruskan dengan mengenkripsi password baru tersebut yang selanjutnya disimpan dalam database.
Yang terakhir jangan lupa untuk menambahkan aturan dalam .htaccess dengan script berikut :
RewriteRule ^lupa-password\.html$ media.php?module=lupapassword&id=$1 [L] RewriteRule ^kirim-password\.html$ media.php?module=kirimpassword&id=$1 [L]
Menggunakan metode reset password seperti ini mempunyai sedikit kelemahan yaitu bisa dimanfaatkan orang iseng untuk mereset pasword kita kapanpun ketika orang iseng ini tahu email yang kita gunakan dalam membership website. Walaupun orang tersebut tidak bisa mengakses email kita, namun hal ini bisa membuat kita tidak nyaman. Sebaiknya reset pasword adalah dengan dua tahapan. Pertama user memasukkan email untuk mendapatkan link konfirmasi reset password, tahap selanjutnya adalah menggunakan link tersebut untuk mendapatkan password baru. Maka jika ada orang lain yang mencoba mereset password kita, kita abaikan saja link yang dikirimkan tersebut.