Mengenal Kelas UserIdentity pada Yii
May 21st, 2012, Written by: | Categories: Programming, Yii Framework

Dalam pemograman Yii, jika Anda perhatikan pada bagian folder protected/components, akan terlihat sebuah kelas bernama UserIdentity. Sebetulnya kelas apa ini, dan untuk apa?

Sebelum masuk ke topik kelas UserIdentity, penulis akan menjelaskan terlebih dahulu latar belakang proses otentikasi. Otentikasi adalah proses pengecekan untuk mengetahui apakah orang bersangkutan adalah orang sebenarnya. Jika benar, maka sistem akan mempersilahkannya masuk atau mengakses data.

Misalnya, orang harus meletakkan sidik jarinya atau membiarkan sistem memindai retina matanya, baru bisa masuk ke ruangan. Contoh lain, seseorang harus memasukkan kartu karyawannya baru bisa masuk ke ruangan kantor. Dan kalau di Web, yang paling umum, seseorang harus memasukkan username dan password untuk membuktikan bahwa dirinya adalah pemilik akun yang sah. Proses itulah yang dinamakan otentikasi.

Otentikasi pada Web tidak hanya terpaku pada mengecek username dan password. Sekarang kita bisa melakukan otentikasi dengan OAuth, Facebook Connect dan lain sebagainya. Pada Yii Framework, kelas yang bertugas melakukan otentikasi user disebut user identity. Jadi contoh user identity itu seperti  OAuth, Facebook Connect, OpenID, LDAP sampai yang paling simpel, username dengan password.

Pada saat pertama kali men-generate aplikasi Web, Yii akan membuatkan sebuah kelas UserIdentity di webroot/protected/components/UserIdentity. Secara default, Yii membuatkan sebuah proses otentikasi yang sangat sederhana, yaitu dengan cara membandingkan array. Berikut contoh kode otentikasinya.

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

    if(!isset($users[$this->username]))
        $this->errorCode=self::ERROR_USERNAME_INVALID;
    else if($users[$this->username]!==$this->password)
        $this->errorCode=self::ERROR_PASSWORD_INVALID;
    else
        $this->errorCode=self::ERROR_NONE;

    return !$this->errorCode;
}

Dalam kenyataannya kita jarang menggunakan otentikasi jenis ini. Kita memang tetap menggunakan username dan password, tetapi dengan cara membandingkan data user ke database, bukan membandingkan data yang diinput dengan array. Berikut contoh yang lazim digunakan orang.

function authenticate(){
    $username=strtolower($this->username);
    $user=User::model()->find('LOWER(username)=?',array($username));
    if($user===null)
        $this->errorCode=self::ERROR_USERNAME_INVALID;
    else if(!$user->validatePassword($this->password))
        $this->errorCode=self::ERROR_PASSWORD_INVALID;
    else{
        $this->_id=$user->id;
        $this->username=$user->username;
        $this->errorCode=self::ERROR_NONE;
    }
    return $this->errorCode==self::ERROR_NONE;
}

Jika Anda perhatikan, UserIdentity yang dipakai kita merupakan turunan dari CUserIdentity. Jika ingin menggunakan otentikasi jenis lain namun parameter yang diperlukan tetap username dan password, maka tetap pakai CUserIdentity saja sebagai kelas induk, tinggal ubah isi dari fungsi authenticate().

Contohnya jika ingin menggunakan LDAP (Lightweight Directory Access Protocol) kita bisa tetap pakai UserIdentity turunan CUserIdentity. Kita hanya cukup mengubah authenticate() seperti ini:

function authenticate(){
    $options = Yii::app()->params['ldap'];
    $dc_string = "dc=" . implode(",dc=",$options['dc']);

    $connection = ldap_connect($options['host']);
    ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($connection, LDAP_OPT_REFERRALS, 0);

    if($connection){
        $bind = ldap_bind($connection, "uid={$this->username},ou={$options['ou']},{$dc_string}", $this->password);

        if(!$bind) $this->errorCode = self::ERROR_PASSWORD_INVALID;
        else $this->errorCode = self::ERROR_NONE;
    }
    return !$this->errorCode;
}

Untuk mengetahui lebih lanjut bagaimana setting LDAP di Yii silahkan merujuk pada tutorial ini.

Demikianlah penjelasan singkat mengenai UserIdentity yang terdapat pada Yii. Jadi dari sini kita dapat menarik kesimpulan bahwa, UserIdentity bisa beraneka ragam, tetapi kita hanya cukup perlu mengubah isi authenticate(). Jadi, tidak peduli login dengan teknik apapun yang harus kita lakukan hanyalah atur authenticate() supaya sesuai.

More about: , ,

One Response to “Mengenal Kelas UserIdentity pada Yii”

Leave a Reply