menggunakan database mysql untuk authentikasi login di framework

10
Menggunakan database mysql untuk authentikasi login di framework Yii Secara default, saat membuat aplikasi web dengan bantuan yiic shell di framework Yii, username dan password untuk keperluan login secara default sudah dikodekan ke dalam file php. Dengan defaultnya demo/demo maupun admin/admin sebagai passangan username/password-nya. Dari dokumentasinya, kita bisa memodifikasi agar Yii mengambil username dan password dari database system. Catatan ini merekam bagaimana memodifikasi file yang diperlukan agar bisa melakukan proses authentikasi menggunakan username dan password yang tersimpan dalam database, karena penulis mengalami kesulitan pada awalnya jadi agar tidak lupa, saya rasa perlu dituliskan sehingga mudah-mudahan juga bermanfaat buat yang lain Untuk menggunakan mysql ini, ada beberapa persyaratan yang harus dipenuhi 1. Framework Yii terinstall dengan benar 2. Membuat webapp dengan yiic tool 2. Operasi CRUD dari tabel User sudah dibuat dan berjalan dengan benar, bisa menggunakan gii maupun yiic shell Note: Penulis menggunakan sistem operasi Ubuntu Linux Struktur tabel User yang akan digunakan dalam proses authentikasi mempunyai struktur sebagai berikut (buat kemudahan aja ) : CREATE TABLE IF NOT EXISTS `User` ( `id` int(5) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(250) NOT NULL, `email` varchar(250) NOT NULL, `role` enum('superadmin','admin','operator','guest') NOT NULL DEFAULT 'guest', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; Buatlah struktur tabel tersebut dengan tool-tool yang anda sukai

Upload: zchabar-jhie

Post on 14-Dec-2014

72 views

Category:

Documents


5 download

TRANSCRIPT

Menggunakan database mysql untuk authentikasi login di framework Yii

Secara default, saat membuat aplikasi web dengan bantuan yiic shell di framework Yii, username dan password untuk keperluan login secara default sudah dikodekan ke dalam file php. Dengan defaultnya demo/demo maupun admin/admin sebagai passangan username/password-nya.

Dari dokumentasinya, kita bisa memodifikasi agar Yii mengambil username dan password dari database system. Catatan ini merekam bagaimana memodifikasi file yang diperlukan agar bisa melakukan proses authentikasi menggunakan username dan password yang tersimpan dalam database, karena penulis mengalami kesulitan pada awalnya jadi agar tidak lupa, saya rasa perlu dituliskan sehingga mudah-mudahan juga bermanfaat buat yang lain

Untuk menggunakan mysql ini, ada beberapa persyaratan yang harus dipenuhi 1. Framework Yii terinstall dengan benar2. Membuat webapp dengan yiic tool2. Operasi CRUD dari tabel User sudah dibuat dan berjalan dengan benar, bisa menggunakan gii maupun yiic shell

Note: Penulis menggunakan sistem operasi Ubuntu LinuxStruktur tabel User yang akan digunakan dalam proses authentikasi mempunyai struktur sebagai berikut (buat kemudahan aja ) :CREATE TABLE IF NOT EXISTS `User` (`id` int(5) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL,`password` varchar(250) NOT NULL,`email` varchar(250) NOT NULL,`role` enum('superadmin','admin','operator','guest') NOT NULL DEFAULT 'guest',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Buatlah struktur tabel tersebut dengan tool-tool yang anda sukai

kemudian ubah konfigurasi main.php di dalam folder protected/config/main.php (dalam direktori web kita) agar menggunakan koneksi ke mysql server

//db'=>array(// 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',//),// uncomment the following to use a MySQL database'db'=>array('connectionString' => 'mysql:host=localhost;dbname=databaseygdigunakan','emulatePrepare' => true,'username' => 'user','password' => 'passwordnyauser','charset' => 'utf8',),

Ada beberapa file yang perlu diubah/ditambahkan agar proses authentikasi, create user, maupun update user bisa berhasil dengan “mulus” ..

tambahkan fungsi bantuan sederhana di class User (protected/models/User.php)

public function hashPassword($phrase){return hash('md5', $phrase);}

Untuk memudahkan proses create dan update user, terutama agar password tersimpan dalam bentuk md5 digest, dan tidak berupa plain text. Ubah Class UserIdentity (protected/components/UserIdentity.php) agar mengambil username dan mengautentikasi password menggunakan database yang ada, sehingga menjadi

findByAttributes(array('username'=>$this->username));if($record===null)$this->errorCode=self::ERROR_USERNAME_INVALID;else if($record->password!==md5($this->password))$this->errorCode=self::ERROR_PASSWORD_INVALID;else{$this->_id=$record->id;$this->errorCode=self::ERROR_NONE;}return !$this->errorCode;}

public function getId(){return $this->_id;}}

Kemudian agar proses create maupun Update user bisa langsung menyimpan password dalam bentuk terenkripsi (md5), ubah/tambahkan beberapa kondisi di controller User (protected/controller/UserController.php), terutama untuk

function actionCreate dan function actionUpdate tambahkan

$model->password = $model->hashPassword($_POST['User']['password']);

di fungsi create maupun update sehingga menjadi

.....$model->attributes=$_POST['User'];$model->password = $model->hashPassword($_POST['User']['password']);if($model->save()).....

.... adalah kode bawaan masing-masing fungsi tersebut

Kemudian coba test, dengan user dari database (kita dapat memasukannya sendiri ke tabel User dengan password di set dengan fungsi md5)ini contoh dari penulis

dan setelah login menggunakan user yang ada di database

Dan ini adalah screenshoot untuk create user

Kalau create user sukses, seperti tampak pada screenshot di bawah ini. terlihat bahwa entry password tersimpan dalam bentuk yang terenkripsi.

Dan ini adalah untuk update user,

Dan lihat kembali hasilnya, proses update-pun menyimpan password dalam bentuk terenkripsi

ontoh Membuat Aplikasi Pertama Yii

Agar Adnda mendapatkan pengalaman pertama dengan Yii, kami jelaskan dalam bab ini bagaimana untuk membuat aplikasi pertama Yii. Kita akan menggunakan piranti bertenaga

yiic yang dapat dipakai dalam mengotomasi pembuatan tugas-tugas tertentu. Demi kenyamanan, kita beranggapan bahwa YiiRoot adalah direktori di mana Yii diinstalasi, dan WebRoot adalah root dokumen oada server Web kita.

Jalankan yiic pada baris perintah seperti berikut:

% YiiRoot/framework/yiic webapp WebRoot/testdrive

Catatan: Saat menjalankan yiic pada Mac OS, Linux atau Unix, Anda harus mengubah perijinan file yiic agar bisa dijalankan. Alternatif lain, Anda bisa menjalankan piranti seperti berikut,

% cd WebRoot/testdrive% php YiiRoot/framework/yiic.php webapp WebRoot/testdrive

Ini akan membuat kerangka aplikasi Yii di bawah direktori WebRoot/testdrive. Aplikasi memiliki struktur direktori yang diperlukan oleh umumnya aplikasi Yii.

Tanpa harus menulis satu baris kode pun, kita dapat menguji aplikasi pertama Yii kita dengan mengakses URL berikut dalam Web browser:

http://hostname/testdrive/index.php

Seperti yang kita lihat, aplikasi memiliki tiga halaman: halaman utama, halaman kontak dan halaman masuk. Halaman utama menampilkan beberapa informasi mengenai aplikasi dan juga status masuk pengguna, halaman kontak menampilkan formulir kontak yang dapat diisi pengguna untuk mengirimkan permintaannya, halaman masuk mengijinkan pengguna untuk mengotentikasi sebelum mengakses konten yang sesuai. Perhatikan foto layar berikut agar lebih jelas.

Halaman Home

Halaman Contact

Halaman Contact dengan kesalahan input

Halaman Contact dengan sukses

Halaman Login

Diagram berikut memperlihatkan struktur direktori pada aplikasi kita Silahkan lihat Konvensi utuk keterangan lebih rinci mengenai struktur ini.

testdrive/ index.php File naskah entri aplikasi Web assets/ berisi file resource yang diterbitkan css/ berisi file CSS images/ berisi file gambar themes/ berisi tema aplikasi protected/ berisi file perlindungan aplikasi yiic naskah baris perintah yiic yiic.bat naskah baris perintah untuk Windows commands/ berisi perintah 'yiic' yang dikustomisasi shell/ berisi perintah 'yiic shell' yang dikustomisasi components/ berisi komponen pengguna MainMenu.php kelas widget 'MainMenu' Identity.php kelas 'Identity' yang dipakai untuk otentikasi views/ berisi file view untuk widget mainMenu.php file view file untuk widget 'MainMenu' config/ berisi file konfigurasi console.php konfigurasi aplikasi konsol main.php konfigurasi aplikasi Web controllers/ berisi file kelas kontroler SiteController.php standar kelas kontroler extensions/ berisi ekstensi pihak-ketiga messages/ berisi terjemahan pesan models/ berisi file kelas model LoginForm.php model formulir untuk aksi 'login' ContactForm.php model formulir untuk aksi 'contact' runtime/ berisi file yang dibuat secara temporal views/ berisi file kontroler tampilan dan tata letak layouts/ berisi file tampilan tata letak main.php standar tata letak untuk semua tampilan site/ berisi file tampilan untuk kontroler 'site' contact.php tampilan untuk aksi 'contact' index.php tampilan untuk aksi 'index' login.php tampilan untuk aksi 'login' system/ berisi file tampilan sistem

Sambungan ke Database

Umumnya aplikasi Web didukung oleh database. Aplikasi pengujian kita tidak terkecuali. Untuk menggunakan database, pertama kita perlu memberitahu aplikasi bagaimana untuk berhubungan denganya. Ini dilakukan dengan mengubah file konfigurasi aplikasi WebRoot/testdrive/protected/config/main.php, seperti terlihat di bawah ini:

return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString'=>'sqlite:protected/data/source.db', ), ),

......);

Dalam contoh di atas, kita menambah entri db ke components, yang memerintahkan aplikasi untuk menyambung ke database SQLite WebRoot/testdrive/protected/data/source.db saat diperlukan.

Catatan: Untuk menggunakan fitur database Yii, kita perlu menghidupkan ekstensi PHP PDO dan ekstensi driver-tertentu PDO. Dalam aplikasi pengujian, kita perlu menghidupkan ekstensi php_pdo dan php_pdo_sqlite.

Selanjutnya, kita perlu menyiapkan database SQLite agar konfigurasi di atas menjadi efektif. Menggunakan beberapa piranti administrasi SQLite, kita dapat membuat database dengan skema sebagai berikut:

CREATE TABLE User ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL);

Catatan: Jika Anda menggunakan database MySQL, Anda harus mengganti AUTOINCREMENT dengan AUTO_INCREMENT dalam SQL di atas.

Demi kemudahan, kita hanya membuat satu tabel User dalam database kita. File database SQLite disimpan sebagai WebRoot/testdrive/protected/data/source.db. Catatan bahwa baik file maupun direktori di mana ia berada harus dijadikan bisa ditulis oleh proses server Web, karena dbutuhkan oleh SQLite.

Mengimplementasikan Operasi CRUD

Sekarang bagian penting. Kita ingin mengimplementasikan operasi CRUD (create, read, update dan delete) untuk tabel User yang baru dibuat. Ini juga umumnya diperlukan dalam praktek aplikasi.

Daripada mendapatkan masalah dengan penulisan kode sebenarnya, kita ingin menggunakan piranti bertenaga yiic lagi untuk pembuatan kode secara otomatis bagi kita. Proses ini juga dikenal sebagai scaffolding. Buka jendela baris perintah, dan jalankan perintah yang terdaftar sebagai berikut,

% cd WebRoot/testdrive% protected/yiic shellYii Interactive Tool v1.0Silahkan ketik 'help' untuk bantuan. Ketik 'exit' untuk keluar.>> model User generate User.php

Kelas 'User' sukses dibuat dalam file berikut: D:\wwwroot\testdrive\protected\models\User.php

Jika Anda mempunyai koneksi database 'db', Anda dapat mengujinya sekarang dengan:

$model=User::model()->find(); print_r($model);

>> crud User generate UserController.php generate create.php mkdir D:/wwwroot/testdrive/protected/views/user generate update.php generate list.php generate show.php

Crud 'user' sukses dibuat. Sekarang Anda dapat mengaksesnya via:http://hostname/path/to/index.php?r=user

Dalam contoh di atas, kita menggunakan perintah yiic shell untuk berinteraksi dengan kerangka aplikasi kita. Pada prompt, kita menjalankan dua sub-perintah: model User dan crud User. Perintah pertama membuat kelas model untuk tabel User, sementara perintah kedua membaca model User dan membuat kode yang diperlukan oleh operasi CRUD.

Catatan: Anda mungkin menemukan kesalahan seperti "...could not find driver", meskipun pemeriksa persyaratan memperlihatkan bahwa Anda sudah menghidupkan PDO dan driver PDO terkait. Jika ini terjadi, Anda dapat mencoba menjalankan piranti yiic sebagai berikut,

% php -c path/ke/php.ini protected/yiic.php shell

di mana path/ke/php.ini mewakili file PHP ini yang benar.

Mari kita nikmati pekerjaan kita dengan melihatnya di URL berikut:

http://hostname/testdrive/index.php?r=user

Ini akan menampilkan sebuah daftar entri pengguna dalam tabel User. Karena tabel kita kosong, tidak ada apapun yang terlihat saat ini.

Klik link New User pada halaman. Kita akan dibawa ke halaman masuk jika kita belum masuk sebelumnya. Setelah masuk, kita melihat formulir input yang mengijinkan kita untuk menambah entri pengguna baru. Lengkapi formulir dan klik tombol Create. Jika ada kesalahan input, pengingat kesalahan akan ditampilkan yang melarang kita menyimpan input. Kembali ke daftar pengguna, seharusnya kita melihat pengguna yang baru ditambahkan muncul dalam daftar.

Ulangi langkah di atas untuk menambah lebih banyak pengguna. Catatan bahwa halaman daftar pengguna akan dipaginasi secara otomatis jika terlalu banyak pengguna yang harus ditampilkan pada satu halaman.

Jika kita masuk sebagai administrator menggunakan admin/admin, kita dapat melihat halaman pengguna admin dengan URL berikut:

http://hostname/testdrive/index.php?r=user/admin

Ini akan memperlihatkan tabel entri pengguna bagi kita. Kita dapat mengklik sel header tabel guna mengurut sesuai kolom terkait. Dan seperti halnya halaman daftar pengguna, halaman

admin juga melakukan paginasi bila ada banyak entri pengguna yang harus ditampilkan dalam satu halaman.