Setiap kali membuat aplikasi, sebenarnya Yii sudah menyediakan menu login. Namun terbatas hanya 'admin/admin' atau 'demo/demo'. Bisa saja kita menambahkan username dan password lain, caranya tinggal tambahkan di protected/components/UserIdentity.php
public function authenticate()
{
$users=array(
// username => password
'demo'=>'demo',
'admin'=>'admin',
);
Akan tetapi hal tersebut sangat berisiko tinggi terhadap keamanan suatu aplikasi. Maka dari itu untuk mempermudah dan memperkecil risiko tersebut dibuatlah login dengan database. Untuk membuat login dengan database, hal yang harus dipersiapkan adalah aplikasi itu sendiri dan tentunya database.
Saya menggunakan aplikasi Helloword yang sudah terhubung dengan database coba. Siapkan tabel yang akan dijadikan tempat untuk menyimpan username dan password yang akan kita buat nantinya :
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | No | PRI | NULL | auto |
| nama | varchar(30) | No |
| NULL |
|
| username | varchar(30) | No | UNI | NULL |
|
| password | varchar(100) | No |
| NULL |
|
| level | enum('administrator','keyuser','enduser') | No |
| NULL |
|
Buatlah operasi
CRUD untuk tabel tersebut dan create user :

Saya akan coba menambahkan fungsi
hash generator menggunakan
sha1 ketika create user untuk password di atas. Caranya buka
protected/controllers/UserController.php dan tambahkan di
actionCreate dan
actionUpdate kode berikut ini :
$model->attributes=$_POST['User'];
$model->password='Helloword'.sha1($model->password);
if($model->save())
Simpan dan jalankan create user kembali, perhatikan hasilnya :
Setelah berhasil create user dengan menggunakan hash generator sha1, langkah selanjutnya adalah melakukan sedikit perubahan pada UserIdentity.php.
public function authenticate(){
$user = User::model()->findByAttributes(array('username'=>$this->username));
$pass = 'Helloword'.sha1($this->password);
if (isset($user)){
if($pass === $user->password){
$this->setState('id', $user->id);
$this->setState('_level', $user->level);
$this->errorCode=self::ERROR_NONE;
}else{
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
} else{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
return !$this->errorCode;
}
Simpan dan buka aplikasi Helloword, silahkan login dengan username dan password yang sudah dibuat sebelumnya ketika mencoba create user.
$this->setState('id', $user->id);
$this->setState('_level', $user->level);
Artikel keren lainnya:
gan kalo levelnya dicreate juga?
BalasHapusMaaf,
BalasHapusLevelnya dibuat untuk keperluan custom accesrules
Thx