Aplikasi Web yang dihasilkan oleh PHPMaker memiliki kemampuan untuk memaksa Pengguna mengganti Kata Sandi atau Password jika masa berlakunya sudah habis. Pengertian memaksa di sini adalah, sistem akan mencegah Pengguna membuka menu atau halaman lain setelah berhasil login, sebelum mengganti Password-nya. Jadi, jika Pengguna tetap bandel mengklik menu lainnya setelah login, sistem akan tetap me-redirect Pengguna tersebut ke halaman Change Password.
Pengaturan mengenai hal ini dapat disesuaikan sesuai kebutuhan dengan sangat mudah dari menu Security -> Advanced -> User Login Options -> Password. Pastikan kita sudah mengaktifkan item Enable password expiry dan menentukan lamanya expired dalam satuan hari pada item Password expiry time (days). Pastikan juga kita sudah mengaktifkan item terkait lainnya yang bernama Track failed attempts pada bagian Login di atasnya.
Berdasarkan kemampuan yang sudah disediakan oleh PHPMaker itu, maka kita sebagai Web Developer pun dapat memaksa Pengguna untuk mengganti Password-nya begitu dia pertama kali berhasil login ke Aplikasi Web.
Untuk mendeteksi sudah berapa kali si Pengguna berhasil Login, maka kita perlu sebuah Field penanda di table users (table tempat data Pengguna disimpan untuk memvalidasi proses Login). Katakanlah nama Field itu adalah Jumlah_Login_Sukses. Itu artinya, saat akun Pengguna tersebut terdaftar di sistem (entah itu melalui metode pendaftaran sendiri oleh Pengguna atau metode pendaftaran oleh Admin), maka nilai Field ini mula-mula adalah 0. Setiap kali Pengguna berhasil Login, maka Field ini harus diupdate dengan menambahkan nilai 1 (Satu), demikian seterusnya.
Setelah persiapan di atas kita pastikan sudah oke, maka pertanyaan selanjutnya adalah, bagaimana cara kita untuk membuat sistem memaksa Pengguna mengganti Password-nya setelah berhasil Login pertama kali ke Aplikasi Web yang kita buat dengan PHPMaker tadi? Penasaran, ‘kan? Hehe…
Caranya sangatlah mudah dan cepat. Kita tidak perlu memodifikasi file script yang dihasilkan oleh PHPMaker, kita juga tidak perlu memodifikasi file Template PHPMaker. Cukup hanya dengan menambahkan sedikit kode PHP saja ke dalam server event yang bernama User_LoggedIn yang terdapat di bawah lokasi: Server Events -> Other -> Login Page, sehingga kode selengkapnya kira-kira menjadi seperti ini:
// User Logged In event function User_LoggedIn($usr) { //echo "User Logged In"; $val = ew_ExecuteScalar("SELECT Jumlah_Login_Sukses FROM ".EW_USER_TABLE." WHERE Username = '".$usr."'"); if ($val == "0") { $_SESSION["Login_Pertama"] = "1"; $_SESSION[EW_SESSION_STATUS] = "passwordexpired"; } else { ew_Execute("UPDATE " . EW_USER_TABLE . " SET Jumlah_Login_Sukses = Jumlah_Login_Sukses + 1 WHERE Username = '".$usr."'"); } }
Dari kode barusan, kita memeriksa terlebih dulu nilai field Jumlah_Login_Sukses di table users melalui konstanta EW_USER_TABLE, berdasarkan data Username Pengguna yang sudah berhasil Login.
Jika nilai yang dikembalikan field tersebut masih nol (0), maka itu artinya si Pengguna baru pertama kali berhasil Login. Segera perbarui nilai variabel session EW_SESSION_STATUS dengan string passwordexpired. Kita juga perlu memberi penanda untuk membedakan bahwa event ini di-trigger oleh kejadian Login Pertama, melalui variabel session yang bernama Login_Pertama (supaya lebih bermakna).
Sedangkan jika nilai yang dikembalikan oleh field Jumlah_Login_Sukses tidak sama dengan nol, maka itu artinya si Pengguna sudah pernah berhasil Login ke Aplikasi Web. Kita tidak perlu lagi memaksa Pengguna mengganti Password-nya. Dalam hal ini, maka kita cukup memperbarui nilai Field Jumlah_Login_Sukses dengan menambahkan nilai satu.
Di sinilah keuntungan yang dapat kita optimalkan dari fitur Password Expired di Aplikasi Web yang dihasilkan oleh PHPMaker. Karena nilai variabel session yang terkait dengan kejadian Password Expired (EW_SESSION_STATUS) tadi kita perbarui, maka sistem akan menampilkan halaman/form Change Password, dan sistem akan memaksa Pengguna untuk mengganti Password-nya. Jika Pengguna masih bandel juga dengan mencoba-coba mengakses menu lain, maka sistem akan tetap me-redirect Pengguna ke halaman Change Password tadi.
Sampai di sini kita sudah berhasil membuat supaya sistem memaksa Pengguna mengganti Password-nya saat berhasil Login pertama kali. Eit, jangan puas dulu! Mengapa? Karena masih ada kode terkait yang harus kita tambahkan di server event lain. Fungsinya untuk membersihkan nilai variabel session EW_SESSION_STATUS yang akan di-trigger oleh kejadian saat Pengguna berhasil mengganti Password-nya.
Oleh karena itu, pastikan kita juga sudah menambahkan kode PHP ke dalam server event User_ChangePassword yang terdapat di bawah lokasi Server Events -> Other -> Change Password Page, sehingga kode selengkapnya menjadi seperti ini:
// User ChangePassword event function User_ChangePassword(&$rs, $usr, $oldpwd, &$newpwd) { // Return FALSE to abort if ($_SESSION["Login_Pertama"] == "1") { ew_Execute("UPDATE " . EW_USER_TABLE . " SET Jumlah_Login_Sukses = Jumlah_Login_Sukses + 1 WHERE Username = '".$usr."'"); $_SESSION[EW_SESSION_STATUS] = "login"; } return TRUE; }
Arti dari kode ini, kita memastikan pada saat Pengguna berhasil mengganti Password-nya, maka sistem memeriksa jika nilai variabel session Login_Pertama bernilai 1 (yang dihasilkan dari server event User_LoggedIn), maka perbarui field Jumlah_Login_Sukses dengan menambahkan nilai satu. Terakhir, jangan lupa untuk memutahirkan nilai variabel session EW_SESSION_STATUS menjadi login yang artinya ketika dia berhasil mengganti Password, maka dia akan melihat menu sama seperti jika berhasil login.
Jika hal ini tidak ditangani pada server event User_ChangePassword tadi, maka kita akan terjebak dengan kondisi sistem yang akan terus menampilkan halaman/form Change Password. Tentu kita tidak menginginkan hal tersebut terjadi.
Bagaimana? Betapa mudah dan cepatnya bukan? PHPMaker, gitu lho! 😀
esen mengatakan
selamat pagi Bang Masino .
Saya sudah mencoba hal diatas, sesuai petunjuk ,tp belum berhasil.
yang terjadi: halaman login menolak , selalu redireck ke halaman login walaupun username dan password sudah benar
Php maker yang saya gunakan v2017.0.7,
apa kah di versi ini $_SESSION[EW_SESSION_STATUS] sudah diganti nama variable nya (hanya dugaan saja saja).
atau adahal lain yang belum saya pahami. terimkash , mohon petunjuk.
Masino Sinaga mengatakan
Tidak ada perubahan nama variable $_SESSION[EW_SESSION_STATUS] sejak versi 2017 sampai dengan versi 2018. Jadi, masih sama.
esen mengatakan
Kalau begitu , Kira kira solusinya apa ya Bang Masino
Kode diatas sudah saya praktekan semua (Hasilnya masih belum bisa berhasil menampilkan halaman ganti password),
saya mencoba hilangkan baris kode ini :
$_SESSION[EW_SESSION_STATUS] = “passwordexpired”; saya bisa login,
apabila kode tsb di tambahkan , yang terjadi gagal login lalu redireck ke login page terus
mohon pencerahan dan bimbingan untuk solusinya Bang Masino, Terimkash
Masino Sinaga mengatakan
Seharusnya tidak ada masalah, karena saya sudah mencobanya dan berhasil. Cek ulang lagi semua persyaratan di atas.
esen mengatakan
Puji Tuhan, akhir nya ketemu permasalahannya Bang,
salah satu nilai array yang dihasilkan Profile Field (pada user login option)
yaitu LastPasswordChangedDate selalu menghasilnya nilai tanggal ketika user tsb register .
langkah yang saya lakukan :
– menunggu password expiry time nya habis,
atau
– merubah nilai LastPasswordChangedDate lewat database
apabila langkah diatas saya lakukan , maka user bisa login , dan ketika pertama login harus ubah passwd dulu.
tapi saya kurang puas , karena user harus menunggu sampai exp habis, atau merubah nilai di db langsung. Ada saran kah bang untuk mengatasi hal tsb?
yang kedua
Bisakah apabila pertama kali login selain ganti passwod , user harus mengisi data lain pula di laiin table ,
misalnya setelah selesai ganti password, user harus dipaksa kembali untuk melengkapi data identitas diri secara lengkap.
apa yg harus sya lakukan kepada variable $_SESSION[EW_SESSION_STATUS] , atau mungkin ada cara lain Bang ? terimkash
Masino Sinaga mengatakan
Ada, Anda bisa mengaktifkan 4 pilihan dari Advanced Security -> User Login Options -> User Table List Page Options, lalu generate ulang semua file script. Setelah itu, dari aplikasi web, masuk ke menu Users List, lalu pilih menu Set password expired.
Tinggal redirect aja user ke halaman User Profile-nya.