Membuat operasi login, logout dan register pada yii
May 13, 2011
162 Comments
Operasi yang akan kita kerjakan adalah yang berkaitan dengan
database. Silahkan lihat tutor sebelumnya jika anda belum memahami
teknik menghubungkan database pada yii disini.
Okeh, pertama-tama mari kita buat buat dua buah table di database,
yaitu table “user” dan table “level” yang isinya sebagai berikut:CREATE TABLE IF NOT EXISTS `tbl_level_admin` (Setelah itu buatlah operasi CRUD untuk tabel “tbl_user_admin” dengan menggunakan gii seperti pada tutor sebelumnya. Setelah selesai, mari kita hubungkan form login yang sudah ada pada aplikasi web bawaan yii dengan database kita. Berikut caranya:
`id_level` int(11) NOT NULL AUTO_INCREMENT,
`level` varchar(20) NOT NULL,
PRIMARY KEY (`id_level`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `tbl_level_admin` (`id_level`, `level`) VALUES
(1, ‘Super Admin’),
(2, ‘Admin’),
(3, ‘Customer’);
CREATE TABLE IF NOT EXISTS `tbl_user_admin` (
`id_user` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(50) NOT NULL,
`enkrip` varchar(50) NOT NULL,
`email` varchar(30) NOT NULL,
`inisial` varchar(10) DEFAULT NULL,
`deskripsi` text,
`id_level` int(11) NOT NULL,
PRIMARY KEY (`id_user`),
KEY `id_level` (`id_level`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
ALTER TABLE `tbl_user_admin`
ADD CONSTRAINT `tbl_user_admin_ibfk_1` FOREIGN KEY (`id_level`) REFERENCES `tbl_level_admin` (`id_level`);
Pertamax, buka file pada folder: protected/components/UserIdentity.php.
Ganti code pada function authenticate menjadi code dibawah ini:
public function authenticate()Selesai, sekarang form login anda sudah terhubung dengan database “tbl_user_admin” kita tadi…
{
$user=UserAdmin::model()->find(‘LOWER(username)=?’,array(strtolower($this->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_user;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
Kalo ada login tentu ada juga form register. Nah, sekarang mari kita buat form register kita. Sebelumnya kita tentukan dulu bahwa di form register nanti akan ada validasi sbb:
-ada captcha dan isian pada captcha harus sesuai dengan yang ada di gambar
-validasi pada inputan email
-ada validasi password1 dan password2 untuk memastikan bahwa user tidak salah mengetik password
-username, password, email, captcha tidak boleh kosong
-memberi panjang minimal dan maksimal pada beberapa inputan
Okeh, stelah selesai menentukan batasannya, mari kita mulai…. Berikut caranya:
Buka file pada protected/controllers/UserAdminControllers.php.
Karena kita mau menambahkan captcha pada controllers, mari kita tambahkan captcha seperti pada penjelasan yang ada disini, yaitu dengan menambahkan code berikut pada “UserAdminControllers”:
public function actions()Agar captcha diizinkan untuk diakses user yang akan register(belum login) maka kita berikan akses dengan merubah method accessRules() menjadi seperti berikut:
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
‘captcha’=>array(
‘class’=>’CCaptchaAction’,
‘backColor’=>0xFFFFFF,
),
// page action renders “static” pages stored under ‘protected/views/site/pages’
// They can be accessed via: index.php?r=site/page&view=FileName
‘page’=>array(
‘class’=>’CViewAction’,
),
);
}
return array(Selesai sudah kita otak-atik controllers ny, sekarang saatnya kita otak-atik modelnya dengan cara:
array(‘allow’, // allow all users to perform ‘index’ and ‘view’ actions
‘actions’=>array(‘create’,’captcha’),
‘users’=>array(‘*’),
),
array
Buka protected/models/UserAdmin.php
Ubah isinya sehingga menjadi seperti berikut:
class UserAdmin extends CActiveRecordpublic $password2;
{
public $password2;
public $verifyCode;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return ‘tbl_user_admin';
}
public function rules()
{
return array(
array(‘username, password, email,verifyCode’, ‘required’),
array(‘verifyCode’, ‘captcha’, ‘allowEmpty’=>!extension_loaded(‘gd’)),
array(‘id_level’, ‘numerical’, ‘integerOnly’=>true),
array(‘username, email’, ‘length’, ‘max’=>30),
array(‘username’, ‘filter’, ‘filter’=>’strtolower’),
array(‘username’,’unique’),
array(‘password, enkrip’, ‘length’, ‘max’=>50,’min’=>5),
array(‘password2′, ‘length’, ‘max’=>50, ‘min’=>5),
array(‘password’, ‘compare’,’compareAttribute’=>’password2′),
array(‘inisial’, ‘length’, ‘max’=>10),
array(’email’,’email’,’checkMX’=>true),
array(‘deskripsi’, ‘safe’),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(‘id_user, username, email, inisial, deskripsi, id_level’, ‘safe’, ‘on’=>’search’),
);
}
public function relations()
{
return array(
‘idLevel’ => array(self::BELONGS_TO, ‘LevelAdmin’, ‘id_level’),
);
}
public function attributeLabels()
{
return array(
‘id_user’ => ‘Id User’,
‘username’ => ‘Username’,
‘password’ => ‘Password’,
’email’ => ‘Email’,
‘inisial’ => ‘Inisial’,
‘deskripsi’ => ‘Deskripsi’,
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare(‘id_user’,$this->id_user);
$criteria->compare(‘username’,$this->username,true);
$criteria->compare(‘password’,$this->password,true);
$criteria->compare(‘enkrip’,$this->enkrip,true);
$criteria->compare(’email’,$this->email,true);
$criteria->compare(‘inisial’,$this->inisial,true);
$criteria->compare(‘deskripsi’,$this->deskripsi,true);
$criteria->compare(‘id_level’,$this->id_level);
return new CActiveDataProvider(get_class($this), array(
‘criteria’=>$criteria,
));
}
public function validatePassword($password)
{
return $this->hashPassword($password,$this->enkrip)===$this->password;
}
public function hashPassword($password,$salt)
{
return md5($salt.$password);
}
public function beforeSave()
{
$isinya=$this->generateSalt();
$dua=$this->password;
$this->enkrip=$isinya;
$this->password=$this->hashPassword($dua,$isinya);
$this->id_level=3;
return true;
}
protected function generateSalt()
{
return uniqid(”,true);
}
}
public $verifyCode;
dua baris di atas untuk menampung variabel password2(password konfirmasi) dan verifyCode(captcha).
public function rules() ===> mendefinisikan batasan/validasi dari variabel yang ada.
public function attributeLabels()===> mengeset label yang ada pada masing-masing variabel
public function validatePassword($password)===>mengecek apakah password sudah benar ato belum
public function hashPassword($password,$salt)===>mengenkripsi password sesuai dengan code yang diberikan
public function beforeSave()===>perintah ini dijalankan sebelum dilakukan penyimpanan
protected function generateSalt()===>menggenerate otomatis code enkripsi password.
Setelah kita otak-atik models ny, mari kita otak-atik views nya dengan cara:
Buka file pada protected/views/userAdmin/_form.php. Ubah code ny hingga menjadi seperti berikut:
Setelah mengubah code _form.php menjadi seperti gambar di atas, sekarang berikan link pada form login agar user dapat mengakses form register. Buka protected/views/site/login.php
Lalu tambahkan code berikut:
Belum punya akun,
Setelah itu, buka aplikasi anda pada browser anda. Klik menu login, dan akan ada link yang akan mengarahkan anda pada menu register, klik menu register tersebut. Maka akan keluar tampilan seperti berikut:
Silahkan coba jalankan dan lihat hasilnya…
Selamat mencoba…
Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..sumber
Jika ada kesalahan dari yg saya buat, mohon koreksi…
Semoga membantu…