Skip navigation


Untuk memudahkan autentikasi, kadang-kadang gw harus menyediakan fungsi autentikasi menggunakan username atau email. Di contoh tutorial blog yang ada di situs Yii diberikan contoh demikian.

<?php
class UserIdentity extends CUserIdentity
{
    private $_id;
 
    public 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;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}


Karena pada dasarnya email dan username memiliki pola ekspresi regular yang berbeda maka autentikasi menggunakan salah satunya pada sebuah input menjadi mudah.

public function authenticate() {
        if (preg_match("/^[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/", $this->username)) {
            $record = User::model()->find('LOWER(email)=?', array(strtolower($this->username)));
        } else {
            $record = User::model()->find('LOWER(username)=?', array(strtolower($this->username)));
        }

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

Untuk mencegah user menggunakan pola yang sama untuk username dan email maka pada model dibuat demikian

public function rules(){
        return array(
            array('username', 'match', 'pattern' => '/^[a-zA-Z][a-zA-Z0-9_]+$/', 'message' => '{attribute} is invalid. Only number, alphabet, and underscore allowed'),
            array('full_name', 'match', 'pattern' => '/^[\p{L}\s]+$/',  'message' => '{attribute} is invalid. Only alphabet allowed'),
            array('email', 'email'),
        );
    }

5 Comments

  1. mas bro..
    bisa minta pencerahanya dong
    saya baru belajar framework kebetulan pake yii 1.1
    cuman saya bingung mau menempatkan templte web nya di mana dan bagaimana konfigurasiya.
    terimaksih mudah mudahan bisa berkenan memberikan pencerahanya.
    salam kenal
    awik

  2. ini maksudnya template itu, layout atau theme ya?
    well, 2-2nya bisa dilihat di
    http://www.yiiframework.com/doc/guide/1.1/en/topics.theming

  3. mas bro…
    saya mau tanya dong (masih newbie nih). Klo form login ditambah tahun sebagai global variabel yang akan dipake dibeberapa form berikutnya gimana caranya ya? saya udah coba otak-atik di UserIdentity dengan $this->setState(‘tahunlogin’, $this->tahun); dan dipanggil dengan Yii::app()->user->tahunlogin kenapa gagal? terima kasih untuk solusinya.
    salam kenal
    eko

    • 1) $this->setState itu punyanya CWebUser, bukan UserIdentity
      2) Yii::app()->user itu CWebUser bukan UserIdentity
      3) Yii::app()->user->tahunlogin, tahunlogin itu bukan bawaan CWebUser,,

      ini sedikit solusi dari saya,,
      http://pastebin.com/wd8gUgN2

  4. kalau mau lebih jelas cara memasang template di yii di blog ini ja http://thizan.blogspot.com/2012/05/cara-memasang-template-di-framework-yii.html. atau bisa di downloadcyber.byethost31.com


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: