Bagaimana Memvalidasi Sandi Lewat (Password) Lama User?

Yugo
Laravel Indonesia
Published in
4 min readNov 10, 2016

Laravel didistribusikan dengan fitur built-in untuk menyetel ulang katasandi. Bahkan, jika kita menggunakan Authentication dengan membuatnya melalui artisan, fitur tersebut sudah dapat berjalan tanpa mengubah apa-apa. Cukup ubah pengaturan SMTP email saja.

Penting untuk diketahui:
Tutorial kali ini menggunakan Laravel versi 5.3 untuk ujicoba. Penggunaan package, URI, dan komponen lainnya bisa berbeda jika diaplikasikan pada versi yang berbeda.

Umumnya, user lain, walaupun dengan role lebih tinggi (seperti administrator misalnya), tidak diperkenankan untuk mengganti langsung katasandi user lainnya. Karena hal tersebut berhubungan dengan privasi. Tidak peduli katasandinya dibuat acak pada saat diisi, apalagi diisi sesuai dengan permintaan user tersebut.

Biasanya, dalam user management hanya disedikan sebuah tautan yang berisi aksi untuk menyetel ulang katasandi user terpilih. Aksi tersebut akan mengirim sebuah email yang berisi instruksi bagaimana menyetel ulang katasandi. Fitur ini sejatinya dapat menggunakan package Reset Password yang disediakan Laravel.

Namun, bagaimana jika user bersangkutan ingin mengubah katasandinya sendiri?

Di dokumentasi Laravel, memang tidak dijelaskan secara gamblang bagaimana membuat fitur ubah katasandi. Namun, berbekal pengetahuan yang ada pada package Hashing dan Validation, fitur tersebut dapat kita buat sendiri. Cukup dengan tiga langkah mudah.

Alur kerja:

  1. Status user sudah harus login ke dalam sistem.
  2. User memasukkan informasi katasandi lama, katasandi baru, dan konfirmasi katasandi.
  3. Form dikirim untuk divalidasi dan diproses.
  4. Data valid, kemudian katasandi baru disimpan.

Persiapan dan langkah pembuatan:

Membuat dan Menggunakan Authentication

Pastikan Laravel sudah diinstal di mesin lokal dan pengaturan sudah disesuaikan.

Masuk ke direktori utama Laravel, dan jalankan perintah di bawah:

$ php artisan make:auth

Dari perintah di atas, terdapat berkas baru yang disalin ke direktori resource. Berkas tersebut berisi layout utama dan beberapa form untuk login, register, dsb.

../views
├── auth
│ ├── login.blade.php
│ ├── passwords
│ │ ├── email.blade.php
│ │ └── reset.blade.php
│ └── register.blade.php
├── errors
│ └── 503.blade.php
├── home.blade.php
├── layouts
│ └── app.blade.php
├── vendor
└── welcome.blade.php

Sebelum dapat dijalankan melalui peramban (browser), jalankan migrasi, kemudian jalankan built-in web server. Perintahnya secara berturut-turut sebagai berikut.

php artisan migratephp artisan serve

Akses URL http://localhost:8000 pada peramban. Buat beberapa user baru dengan mendaftar melalui URI /register.

Membuat Form Ubah Katasandi

Dalam distribusinya, Laravel menyediakan default template yang berbasis Bootstrap. Template ini akan disalin dari direktori vendor ke direktori resource/views apabila berhasil membuat Authentication seperti contoh di atas.

Nah, template ini akan kita gunakan sebagai basis untuk form ubah katasandi nantinya.

views
├── auth
│ ├── login.blade.php
│ ├── passwords
│ │ ├── email.blade.php
│ │ └── reset.blade.php
│ └── register.blade.php
├── errors
│ └── 503.blade.php
├── home.blade.php
├── layouts
│ └── app.blade.php
├── password
│ └── change.blade.php
├── vendor
└── welcome.blade.php

Buat berkas baru pada direktori views/password/ dengan nama change.blade.php. Modifikasi berkas tersebut sehingga isinya kurang lebih seperti ini.

Hasil akhir kode tersebut jika dilihat melalui peramban kurang lebih seperti berikut.

Membuat Custom Validation dan Controller

Ada dua hal yang dilakukan pada bagian ini, yaitu mendefinisikan route, dan membuat controller baru dengan nama PasswordController.php.

Perhatikan bahwa saya mendefinisikan dua URI yang sama., yaitu password. Route pertama menggunakan PasswordController dengan method change() yang berfungsi untuk menampilkan form ubah katasandi. Sedangkan route kedua menggunakan controller yang sama, hanya saja HTTP Verb dan method-nya berbeda. Route yang keda ini berfungsi untuk memvalidasi data dan menyimpan katasandi baru.

Tak lupa juga saya menambahkan middleware auth pada kedua route tersebut. Hal ini untuk memastikan bahwa user yang sudah login lah yang dapat mengganti katasandinya.

Sedangkan untuk isian controller, dapat dilihat pada potongan kode berikut.

Dimulai dari baris ke 30, saya meng-extend validasi dengan nama password. Isinya melakukan pengecekan persamaan katasandi yang dimasukkan oleh user dengan katasandi lama yang disimpan. Proses pengecekan ini menggunakan package Hashing bawaan Laravel.

Berikutnya, dimulai dari baris ke 40 didefinisikan validasi untuk masukan dari form. Langkah selanjutnya, cuup mudah dipahami menurut saya, ialah melakukan validasi dan mengambalikan ke halaman yang sama apabila validasi gagal dan tidak lupa untuk menampilkan pesan kesahalan.

Langkah terakhir, apabila data valid, katasandi baru disimpan ke basisdata menggunakan fungsi bcrypt().

Selain menggunakan facade Validator seperti contoh di atas, kita juga bisa memvalidasi masukkan menggunakan Form Request.

Konklusi

Fitur ubah katasandi merupakan salah satu yang harus ada pada aplikasi web. Apalagi jika aplikasi yang kita bangun menerapkan fitur seamless login, misal login menggunakan akun Facebook atau Google.

Untuk contoh lengkap kode di atas, dapat meng-clone repositori Github yang beralamat di arvernester/tutorial.

Jangan lupa untuk membaca panduan instalasinya. 😉

--

--