Berita

Autentikasi dan Otorisasi User Menggunakan Framework Yii

9 tahun yang lalu

(Oleh : Badiyanto)

Otentikasi adalah proses identifikasi pengguna. Ada beberapa aplikasi web memberikan kombinasi nama user/password atau email, melalui pihak ketiga, seperti lewat akun Twitter atau Facebook. Pengguna yang tampa melalui otentikasi disebut anonymous, atau guest/tamu. Terkait dengan otentikasi otorisasi. Otorisasi adalah proses menentukan apakah pengguna saat ini diperbolehkan untuk melakukan tugas tertentu atau tidak.

Komponen kunci

Proses otentikasi ini dirancang dalamYii menjadi cukup fleksibel, sehingga otentikasi dapat dilakukan dengan cara:

  • user statis(misalnya, nama uesr “demo”dan password “demo”dan admin passwordnya “admin”.
  • user dalam tabel yang ada dalam database
  • pakai pihak ketiga (misalnya, Facebook atauTwitter)
  • Light weight Directory Access Protocol(LDAP)

Identifikasi user terdapat pada file /protected/components/UserIdentity.php

?php
/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
    /**
     * Authenticates a user.
     * The example implementation makes sure if the username and password
     * are both 'demo'.
     * In practical applications, this should be changed to authenticate
     * against some persistent user identity storage (e.g. database).
     * @return boolean whether authentication succeeds.
     */
    public function authenticate()
    {
        $users=array(
            // username => password
            'demo'=>'demo',
            'admin'=>'admin',
         );
        if(!isset($users[$this->username]))
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        elseif($users[$this->username]!==$this->password)
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
            $this->errorCode=self::ERROR_NONE;
        return !$this->errorCode;
    }
}
?>

 

untuk user statis 'demo'=>'demo', login : demo dan passwordnya 'demo' dan 'admin'=>'admin' user ‘admin’ passwordnya ‘admin’

Anda bisa menambahkan user statik


Buka /protected/components/UserIdentity.php pada bagian function authenticate() tambahkan seperti skrip berikut :

public function authenticate()
    {
     $users=array(
            // username => password
            'demo'=>'demo',
            'admin'=>'admin',
            'ana'=>'ana123?',
            'budi'=>’budi123?',
               
         );
    if(!isset($users[$this->username]))
            $this->errorCode=self::ERROR_USERNAME_INVALID;
    elseif($users[$this->username]!==$this->password)
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
    else
            $this->errorCode=self::ERROR_NONE;
        return !$this->errorCode;
    }

Uji Coba :

Membuat user dengan tabel

Buatlah user seperti skrip SQL dibawah ini :

CREATE TABLE user (
  id int(11) NOT NULL AUTO_INCREMENT,
  full_name char(50) CHARACTER SET utf8 NOT NULL,
  username varchar(128) CHARACTER SET utf8 NOT NULL,
  password varchar(128) CHARACTER SET utf8 NOT NULL,
  email varchar(128) CHARACTER SET utf8 NOT NULL,
  active tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Bualtah modelnya dengan mengunakan gii Generator :

Cara menghubungkan UserIdentity dengan User, tujuannya agar rekaman dalam tabel user bisa digunakan untuk login ke sistem. Buka file /protected/components/UserIdentity.php kemudian  diubah menjadi sepeti pada kode program berikut :

php
/***********************************************
 * UserIdentity represents the data needed to
 * identity a user.
 * It contains the authentication method that checks
 * if the provided
 * data can identity the user.
 ***********************************************/
class UserIdentity extends CUserIdentity
{
 private $_id;

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

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

}

Untuk menyimpan password terenkripsi tambahkan trigger pada nodel User.php seperti skrip berikut:

// enkripsi Password //

protected function beforeSave()
    {
        if(parent::beforeSave())
        {
            if($this->isNewRecord)
            {
                $this->password=MD5($this->password);
            }
            else
                $this->password=MD5($this->password);
            return true;
        }
        else
            return false;
    }

Anda bisa menggunakan user yang tersimpan dalam tabel user dengan nama login yang terekam dalam kolom username pada tabel user.

Untuk membaca user identifikasi user

<?php
  echo "id=".Yii::app()->user->id;
  echo "<br>";
  echo "Nama lengkap :" .User::model()->findByPk(Yii::app()->user->id)->full_name;
  echo "<br>";
  echo "Nama Login   :" .User::model()->findByPk(Yii::app()->user->id)->username;
?>

selamat mencoba


Rajin Pangkal Pandai


Berita Lainnya

Sosialisasi Game Paravox oleh ESI DIY di UTDI dan Kampus-Kampus Yogyakarta: UTDI Raih Juara di Paravox Battle Campus!
Sosialisasi Game Paravox oleh ESI DIY di UTDI dan Kampus-Kampus Yogyakarta: UTDI Raih Juara di Paravox Battle Campus!

10 hari yang lalu

Industri game di Indonesia semakin berkembang pesat, dan salah satu game terbaru yang mencuri perhatian adalah Paravox, sebuah 3v3 shooter ...

Selengkapnya
Universitas Teknologi Digital Indonesia (UTDI) Jalin Kerjasama dengan TP PKK DIY, Tanda Tangani MoU untuk Pengembangan Teknologi dan Pemberdayaan Masyarakat
Universitas Teknologi Digital Indonesia (UTDI) Jalin Kerjasama dengan TP PKK DIY, Tanda Tangani MoU untuk Pengembangan Teknologi dan Pemberdayaan Masyarakat

30 hari yang lalu

[Yogyakarta, 17 Oktober 2024] Universitas Teknologi Digital Indonesia (UTDI) kembali memperluas jaringan kerjasamanya melalui penandatanganan MoU dengan Tim Penggerak Pemberdayaan Kesejahteraan Keluarga ...

Selengkapnya
Mahasiswa Universitas Teknologi Digital Indonesia Raih Prestasi Gemilang di Bidang Teknologi dan Olahraga
Mahasiswa Universitas Teknologi Digital Indonesia Raih Prestasi Gemilang di Bidang Teknologi dan Olahraga

30 hari yang lalu

Mahasiswi Universitas Teknologi Digital Indonesia (UTDI), Aisyah Dita Saputri, berhasil meraih juara 2 pada kompetisi Information and Technology Festival 2024 (Intechfest 2024) Kategori ...

Selengkapnya