Beranda · Contact Us · Downloads

Yii: Membuat Login dengan Database

Setiap kali membuat aplikasi, sebenarnya Yii sudah menyediakan menu login. Namun terbatas hanya 'admin/admin' atau 'demo/demo'. Bisa saja kita menambahkan username dan password lain, caranya tinggal tambahkan di protected/components/UserIdentity.php

 public function authenticate()
    {
        $users=array(
            // username => password
            'demo'=>'demo',
            'admin'=>'admin',
        );


Akan tetapi hal tersebut sangat berisiko tinggi terhadap keamanan suatu aplikasi.  Maka dari itu untuk mempermudah dan memperkecil risiko tersebut dibuatlah login dengan database. Untuk membuat login dengan database, hal yang harus dipersiapkan adalah aplikasi itu sendiri dan tentunya database.

Saya menggunakan aplikasi Helloword yang sudah terhubung dengan database coba. Siapkan tabel yang akan dijadikan tempat untuk menyimpan username dan password yang akan kita buat nantinya :
FieldTypeNullKeyDefaultExtra
idint(11)NoPRINULLauto
namavarchar(30)No
NULL
usernamevarchar(30)NoUNINULL
passwordvarchar(100)No
NULL
levelenum('administrator','keyuser','enduser')No
NULL
Buatlah operasi CRUD untuk tabel tersebut dan create user :
Saya akan coba menambahkan fungsi hash generator menggunakan sha1 ketika create user untuk password di atas. Caranya buka protected/controllers/UserController.php dan tambahkan di actionCreate dan actionUpdate kode berikut ini :

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

Simpan dan jalankan create user kembali, perhatikan hasilnya :

Setelah berhasil create user dengan menggunakan hash generator sha1, langkah selanjutnya adalah melakukan sedikit perubahan pada UserIdentity.php. 

public function authenticate(){
$user = User::model()->findByAttributes(array('username'=>$this->username));
$pass = 'Helloword'.sha1($this->password);
        if (isset($user)){
            if($pass === $user->password){
                $this->setState('id', $user->id);

                $this->setState('_level', $user->level);
                $this->errorCode=self::ERROR_NONE;           
            }else{
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
            }
        } else{
         $this->errorCode=self::ERROR_USERNAME_INVALID;
        }
        return !$this->errorCode;
    }   


Simpan dan buka aplikasi Helloword, silahkan login dengan username dan password yang sudah dibuat sebelumnya ketika mencoba create user.

$this->setState('id', $user->id);
$this->setState('_level', $user->level);

Kode di atas menyimpan id beserta level, yang nantinya akan kita gunakan untuk membuat custom accesrules.


Good Luck!


Artikel keren lainnya:

2 Tanggapan untuk "Yii: Membuat Login dengan Database"