Jumat, 13 April 2012

Membuat Authentikasi User pada CakePHP



1. Edit/buat file AppController.php pada folder ../app/Controller/ masukkan kode berikut:
<?php
class AppController extends Controller {
public $components = array(
'Session',
'Auth'=>array(
'loginRedirect' =>array('controller'=>'users', 'action'=>'index'),
'logoutRedirect' =>array('controller'=>'users', 'action'=>'index'),
'authError'=>' Anda tidak dapat mengakes halaman ini',
'authorize'=>array('Controller')
)
);
public function isAuthorized($user){
return true;
}
public function beforeFilter(){
$this->Auth->allow('index', 'view');
$this->set('logged_in', $this->Auth->loggedIn());
$this->set('current_user', $this->Auth->user());
}
}
?>

2. Edit file UsersController.php pada ..\app\controller tambahkan kode berikut [sebelum public function index()]

public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('add');
}
public function login(){
if($this->request->is('post')){
if($this->Auth->login()){
$this->redirect($this->Auth->redirect());
}else {
$this->Session->setFlash('Username atau password anda salah');
}
}
}
public function logout(){
$this->redirect($this->Auth->logout());
}

3. Buat satu file bernama login.ctp pada folder /app/View/Users, tambahkan kode berikut:

<h2> Halaman Login</h2>
<?php
echo $this->Form->create();
echo $this->Form->Input('username');
echo $this->Form->Input('password');
echo $this->Form->end('Login');
?>

4. Edit file add.ctp pada folder /app/View/Users tambahkan kode berikut (bold):


<div class="users form">
<?php echo $this->Form->create('User');?>
<fieldset>
<legend>Register</legend>
<?php
echo $this->Form->input('name');
echo $this->Form->input('username');
echo $this->Form->input('email');
echo $this->Form->input('password');
echo $this->Form->input('password_confirmation', array('type'=>'password'));
?>
</fieldset>
<?php echo $this->Form->end('Submit');?>
</div>
<div class="actions">
<h3>Actions</h3>
<ul>
<li><?php echo $this->Html->link('List Users', array('action' =>
'index'));?></li>
</ul>
</div>

5. Beri validasi pada form tambahan pass dan konfirmasi pass dengan mengedit seluruh code pada file model User.php pada folder /app/Model dengan kode berikut:

<?php
class User extends AppModel {
public $name = 'User';
public $displayField = 'name';
public $validate = array(
'name'=>array(
'Please enter your name.'=>array(
'rule'=>'notEmpty',
'message'=>'Masukkan nama anda.'
)
),
'username'=>array(
'The username must be between 5 and 15 characters.'=>array(
'rule'=>array('between', 5, 15),
'message'=>'Username harus memiliki 5 sampai 15 karakter.'
),
'That username has already been taken'=>array(
'rule'=>'isUnique',
'message'=>'Username sudah ada.'
)
),
'email'=>array(
'Valid email'=>array(
'rule'=>array('email'),
'message'=>'Masukkan alamat email yang valid'
)
),
'password'=>array(
'Not empty'=>array(

'rule'=>'notEmpty',
'message'=>'Mohon masukkan password anda'
),
'Match passwords' =>array(
'rule'=>'matchPasswords',
'message'=>'Password anda tidak cocok'
)
),
'password_confirmation'=>array(
'Not empty'=>array(
'rule'=>'notEmpty',
'message'=>'Password anda tidak cocok'
)
)
);
public function matchPasswords($data){
if($data['password'] == $this->data['User']['password_confirmation']){
return true;
}
$this->invalidate('password_confirmation', 'Password anda tidak
cocok');
return false;
}
public function beforeSave(){
if (isset($this->data['User']['password'])){
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
}
return true;
}
}
?>

6. Memberi visual feedback agar user tahu bahwa dirinya sedang login atau tidak, dengan
mengedit file default.ctp pada folder /app/View/Layouts berikut kodenya (bold):

..... kode sebelumnya
<body>
<div id="container">
<div id="header">
<h1><?php echo $this->Html->link($cakeDescription,
'http://cakephp.org'); ?></h1>
</div>
<div id="content">
<div style="text-align: right;">
<?php if($logged_in): ?>
Selamat datang <?php echo $current_user['username']; ?>. <?php
echo $this->Html->link('Logout', array('controller'=>'users','action'=>'logout')); ?>
<?php else: ?>
<?php echo $this->Html->link('Login', array('controller'=>'users','action'=>'login')); ?>
<?php endif; ?>

</div>
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
... kode sesudahnya




Tidak ada komentar:

Posting Komentar