Tutorial Belajar Pemrograman, membuat game, membuat aplikasi, membuat program, android, game maker, yii, php, CSS, HTML, java, javascript, codeigniter, jquery, Pascal, c++

Thursday, December 26, 2013

Membuat Login di Yii Framework - Sebelumnya kita sudah pernah membuat simple login yang user dan passwordnya kita letakan di dalam script pada kali ini kita akan membuat login yang user dan passnya kita letakan dalam database dan passnya kita enkripsi menggunakan MD5 sehingga lebih terjamin keamanannya.

Baca juga : Membuat Otorisasi Halaman Pada Yii Framework

Untuk lebih jelasnya kita langsung saja ke dalam prakteknya Membuat Login di Yii Framework, ikutilah langkah - langkah berikut :

1. Tabel

Buatlah sebuah tabel baru di dalam database anda dengan nama users, dengan struktur tabel seperti berikut :

NameTypeSizeExtraPrimary
idINT100auto_incrementyes
usernameVARCHAR100
passwordVARCHAR100
levelINT11

Kemudian isikan tabel tersebut dengan tiga buah data, anda dapat menambahkan datanya melalui phpMyAdmin, pilih database lalu klik tab SQL, lalu masukan perintah berikut :

INSERT INTO users (username , password, level) VALUES ('jin',md5('jin'),1);
INSERT INTO users (username , password, level) VALUES ('rias',md5('gremory'),2);
INSERT INTO users (username , password, level) VALUES ('shina',md5('mashiro'),2);

Sekarang anda klik tombol "Go" maka akan memasukan ketiga data user dan password tersebut ke dalam database :

md5 enkripsi password

2. Model

Buatlah sebuah model baru dengan menggunakan Gii Code Generator dengan nama User dan dengan nama tabel users:

gii code generator model user

Sekarang buka model User.php yang sudah berhasil di generate yang terdapat dalam direktori Protected\models kemudian tambahkan script berikut :

//digunakan untuk memproses data setelah di validasi
protected function afterValidate() {
     parent::afterValidate();
            
     //melakukan enkripsi pada passwod yang di input
     $this->password = $this->encrypt($this->password);
}
        
//membuat sebuah fungsi untuk mengenkripsi data
public function encrypt($value){
     return md5($value);
}

Maka sekarang script user anda selengkapnya adalah :

<?php

/**
 * This is the model class for table "users".
 *
 * The followings are the available columns in table 'users':
 * @property integer $id
 * @property string $username
 * @property string $password
 * @property integer $level
 */
class User extends CActiveRecord
{
 /**
  * @return string the associated database table name
  */
        
        //digunakan untuk memproses data setelah validasi
        protected function afterValidate() {
            parent::afterValidate();
            
            //melakukan enkripsi pada data yang di input
            $this->password = $this->encrypt($this->password);
        }
        
        //membuat sebuah fungsi enkripsi
        public function encrypt($value){
            return md5($value);
        }

        public function tableName()
 {
  return 'users';
 }

 /**
  * @return array validation rules for model attributes.
  */
 public function rules()
 {
  // NOTE: you should only define rules for those attributes that
  // will receive user inputs.
  return array(
   array('level', 'numerical', 'integerOnly'=>true),
   array('username, password', 'length', 'max'=>100),
   // The following rule is used by search().
   // @todo Please remove those attributes that should not be searched.
   array('id, username, password, level', 'safe', 'on'=>'search'),
  );
 }

 /**
  * @return array relational rules.
  */
 public function relations()
 {
  // NOTE: you may need to adjust the relation name and the related
  // class name for the relations automatically generated below.
  return array(
  );
 }

 /**
  * @return array customized attribute labels (name=>label)
  */
 public function attributeLabels()
 {
  return array(
   'id' => 'ID',
   'username' => 'Username',
   'password' => 'Password',
   'level' => 'Level',
  );
 }

 /**
  * Retrieves a list of models based on the current search/filter conditions.
  *
  * Typical usecase:
  * - Initialize the model fields with values from filter form.
  * - Execute this method to get CActiveDataProvider instance which will filter
  * models according to data in model fields.
  * - Pass data provider to CGridView, CListView or any similar widget.
  *
  * @return CActiveDataProvider the data provider that can return the models
  * based on the search/filter conditions.
  */
 public function search()
 {
  // @todo Please modify the following code to remove attributes that should not be searched.

  $criteria=new CDbCriteria;

  $criteria->compare('id',$this->id);
  $criteria->compare('username',$this->username,true);
  $criteria->compare('password',$this->password,true);
  $criteria->compare('level',$this->level);

  return new CActiveDataProvider($this, array(
   'criteria'=>$criteria,
  ));
 }

 /**
  * Returns the static model of the specified AR class.
  * Please note that you should have this exact method in all your CActiveRecord descendants!
  * @param string $className active record class name.
  * @return User the static model class
  */
 public static function model($className=__CLASS__)
 {
  return parent::model($className);
 }
}

3. Components

Selanjutnya sekarang kita akan membuat user yang sudah kita simpan di dalam tabel di tambahkan ke dalam UserIndentitiy.php. Sekarang buka file UserIndentity.php yang terdapat dalam direktori Protected\components kemudian ubah scriptnya menjadi seperti 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;
 /**
  * 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()
 {
                $model = new User;
  $user= $model->findByAttributes(array('username'=>$this->username));
                if($user===null){
                    $this->errorCode=self::ERROR_USERNAME_INVALID;
                }else{
                    if($user->password !== $user->encrypt($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;
        }
}

Sebenarnya kita hanya menambahkan beberapa baris kode dan merubah strukturnya saja, penjelasan dari script di atas :

$model = new User;
$user= $model->findByAttributes(array('username'=>$this->username));

Digunakan untuk menemukan data user dalam database berdasarkan username.

if($user===null){
                    $this->errorCode=self::ERROR_USERNAME_INVALID;

Maksud dari script dia atas adalah jika user tidak ada maka tampilkan pesan error.

if($user->password !== $user->encrypt($this->password)){
                        $this->errorCode=self::ERROR_PASSWORD_INVALID;

Maksud dari script dia atas adalah jika passwod salah maka tampilkan pesan error.

this->_id = $user->id;

Memberikan nilai pada $_id;

$this->errorCode=self::ERROR_NONE;

Ini berarti tidak ada error.

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

Unutk mendapatkan nilai $_id

4. Test

Sekarang untuk mencobanya anda buka browser kemudian ketikan alamat berikut :

http://localhost/Belajar_Yii/website/site/login

apabila anda belumn mengubah URL anda masukan seperti ini :

http://localhost/Belajar_Yii/website/index.php?r=site/login

*notes kode yang berwarna merah adalah direktori folder Yii Framework anda di localhost.

Membuat Login di Yii Framework

Sekarang loginlah denan username dan password yang anda masukan ke dalam database, contoh username "jin" pass "jin". Sekarang cosutum login telah selesai selanjutnya kita akan memberikan hak akses pada setiap user dengan level berbeda - beda.

Login di Yii Framework sekarang sudah selesai, baca juga tutorial belajar Yii Framework lainnya.

Terima Kasih Telah Mengunjungi Blog Sederhana Ini.

Di Mohon Apabila Anda Ingin Mengcopas Artikel Pada Blog ini Cantumkan URL Sumber.

Sebagai Pengunjung Yang Baik Anda Dapat Meninggalkan Komentar di Blog Sederhana Ini.

Share this post

6 komentar

  1. saya coba nambahin user dengan level 1, jadi level 1 nya ada 2..pas login pake yang pertama bisa..tp kalo pake user level 1 yang baru ko ditolak jg ,,,,apa cuma bisa nerima 1 aja apa gmn gan?

    ReplyDelete
    Replies
    1. :-d
      iy gan soalnya itukan di database di cari berdasarkan lvlnya aj jadi cuma yang hasil pencarian pertama aj usernya, supaya bisa banyak agan bisa ubah pencarian dbasenya sehingga di cocokan dengan username juga, nih klw ane, ane ubah jadi gini gan mungkin agan punya algoritma yg lebih baugs hehehe.

      public function accessRules(){
      $us = Yii::app()->user->name;
      $model= new User;
      $level = $model->findByAttributes(array('level'=>1,'username'=>$us));
      if(isset($level)){
      return array(
      array('allow', // allow all users to perform 'index' and 'view' actions
      'actions'=>array('index','view'),
      'users'=>array('*'),
      ),
      array('allow', // allow authenticated user to perform 'create' and 'update' actions
      'actions'=>array('admin','create'),
      'users'=>array('@'),
      ),
      array('allow', // allow admin user to perform 'admin' and 'delete' actions
      'actions'=>array('update','delete'),
      'users'=>array($level->username),
      ),
      array('deny', // deny all users
      'users'=>array('*'),
      ),
      );
      }else{
      return array(
      array('allow', // allow all users to perform 'index' and 'view' actions
      'actions'=>array('index','view'),
      'users'=>array('*'),
      ),
      array('allow', // allow authenticated user to perform 'create' and 'update' actions
      'actions'=>array('admin','create'),
      'users'=>array('@'),
      ),
      array('deny', // deny all users
      'users'=>array('*'),
      ),
      );
      }

      }

      Delete
  2. Gan itu scriptnya yg bagian apa? Users.php apa useridentity.php? Supaya pas login semua data di tabel user bisa login juga, mkasih

    ReplyDelete
  3. oke makasih gan sangat membantu ..
    oia gan buat tutor registrasi user di yii dong , jadi user yang baru masuk harus lewat halaman registrasi dulu , setelah itu datanya bisa langsung masuk di database user ..

    terima kasih :)

    ReplyDelete
  4. Terimakasih. Sangat membantu

    ReplyDelete

:) :) :-) :-) :)) :)) =)) =)) :( :( :-( :-( :(( :(( :d :d :-d :-d @-) @-) :p :p :o :o :>) :>) (o) (o) [-( [-( :-? :-? (p) (p) :-s :-s (m) (m) 8-) 8-) :-t :-t :-b :-b b-( b-( :-# :-# =p~ =p~ :-$ :-$ (b) (b) (f) (f) x-) x-) (k) (k) (h) (h) (c) (c) cheer cheer

 
© Jin Toples Programming
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0