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

3 Dosen UTDI Jadi Pemateri Artificial Intelligance (AI) di SMA N 2 Bantul
3 Dosen UTDI Jadi Pemateri Artificial Intelligance (AI) di SMA N 2 Bantul

9 bulan yang lalu

SMA N 2 Bantul mengadakan acara khusus untuk memperkenalkan materi Kecerdasan Buatan (Artificial Intelligence/AI) kepada siswa (13/7). Acara ini diadakan sebagai ...

Selengkapnya
HIMATEKKOM Berkolaborasi dengan Dosen UTDI melakukan Pelatihan Arduino di SMK Muhammadiyah Imogiri dan SMK Negeri 1 Pleret
HIMATEKKOM Berkolaborasi dengan Dosen UTDI melakukan Pelatihan Arduino di SMK Muhammadiyah Imogiri dan SMK Negeri 1 Pleret

10 bulan yang lalu

HIMATEKKOM atau Himpunan Mahasiswa Teknologi Komputer UTDI telah melakukan pelatihan Arduino di SMK Muhammadiyah Imogiri pada tanggal 13 Juni 2023 dan SMK ...

Selengkapnya
Pengumuman Seleksi Calon Rektor UTDI Periode 2023-2028
Pengumuman Seleksi Calon Rektor UTDI Periode 2023-2028

11 bulan yang lalu

File dapat diunduh melalui  Seleksi Calon Rektor UTDI 2023-2028

Selengkapnya