> > > Zend Framework 19: Kết hợp Plugin với Zend_Auth để kiểm tra đăng nhập

Zend Framework 19: Kết hợp Plugin với Zend_Auth để kiểm tra đăng nhập

Hôm nay mình sẽ viết 1 tutorial kết hợp gắn plugin và Zend_auth để kiểm tra đăng nhập.
Bao cao su Super Men
 
32,000 VNĐ
Bao cao su Rocmen 4 in 1
 

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com

1) Tạo 1 file Plugin: /library/Qhuyonline/System/Plugin.php

PHP Code:
<?php
class Qhuyonline_System_Plugin extends Zend_Controller_Plugin_Abstract
{
       
    public function 
preDispatch(Zend_Controller_Request_Abstract $request){
        
          
/*
           * Kiem tra xem co phai dang truy phan Admin hay khong
           */
          
$controllerName $request->getControllerName();
          
$flagAdmin false;
          if(
$controllerName == 'admin'){
              
$flagAdmin true;
          }else{
              
$tmp explode('-'$controllerName);              
              if(
current($tmp) == 'admin'){
                  
$flagAdmin true;
              }
          }
        
    
          if(
$flagAdmin){

                  
$request->setModuleName('default');
                  
$request->setControllerName('public');
                  
$request->setActionName('login');
              
          }
    }
    
}

như vậy nếu như gặp module là admin hoặc controller có tên là Admin-...php thì nó sẽ kiểm tra và redirect sang action login ở controller public.

2. tạo ra file PublicController trong module default với nội dung như sau:
 

PHP Code:
<?php
class PublicController extends Zend_Controller_Action{
        private 
$_arrParam;
    public function 
init(){
        
parent::init();        
        
$this->_arrParam $this->_request->getParams();
        
$this->view->arrParam $this->_arrParam;
    }
    

    public function 
loginAction(){
         
        if(
$this->_request->isPost()){
                       
//check validate error tu form
            
$validator = new Default_Form_ValidateLogin($this->_arrParam);
            if(
$validator->isVaild()){
                
$this->view->errors $validator->getMessageErrors();
                
$this->view->Item $validator->getData();
            }else{
                
$auth = new Qhuyonline_System_Auth();
                
                if(
$auth->login($this->_arrParam) == true){                    
                    
//dang nhap thanh cong
                
}
            }
        }
    }
    
    public function 
logoutAction(){
        
$auth = new Qhuyonline_System_Auth();
        
$auth->logout();
        
$this->_redirect('/default');
    }

}

Lưu ý ở đây mình sẽ ko post view và form lên(các bạn có thể tự tạo nó nhé)(Form sẽ gồm 2 element là email và password)

3. Tạo 1 file Auth.php nằm trong Qhuyonline/System/Auth.php
 

PHP Code:
<?php
class Qhuyonline_System_Auth{
    
    private 
$_messages;
    
    public function 
login($arrParam =  null$options null){
            
//1. Lay ket noi voi database
            
$db Zend_Db_Table::getDefaultAdapter();
            
            
//2. 
            
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
            
$authAdapter->setTableName('users')
                        ->
setIdentityColumn('email')
                        ->
setCredentialColumn('password');
            
            
//3.
            
$authAdapter->setIdentity($arrParam['email']);
            
$password md5($arrParam['password'];
            
$authAdapter->setCredential($password);
            
            
//4.
            
$select $authAdapter->getDbSelect();
            
$select->where("status = 'active'");
            
            
//5.
            
$auth Zend_Auth::getInstance();
            
$result $auth->authenticate($authAdapter);
            
$flag false;
            
            if(
$result->isValid()){                
                
$returnColumns = array('id','user_name','email','password');
                
$omitColumns = array('password');
                
$data $authAdapter->getResultRowObject(null $omitColumns);
                
$auth->getStorage()->write($data);
                
$flag true;
            }else{
                
$this->_messages $result->getMessages();
            }
        return 
$flag;
    }
    
    public function 
getMessages(){
        return 
$this->_messages;
    }
    
    public function 
logout(){
        
$auth Zend_Auth::getInstance();
        
$auth->clearIdentity();
    }
}

Bây h để load được plugin các bạn phải đăng kí ở file Boostrap.php

PHP Code:
protected function _initLoadPlugin(){
        
$front Zend_Controller_Front::getInstance();
        
$front->registerPlugin(new Qhuyonline_System_Plugin());

        
    } 

Và hãy nhớ 1 điều nửa là trong db của các bạn có table users như sau:

PHP Code:
CREATE TABLE IF NOT EXISTS `users` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
usernamevarchar(32COLLATE utf8_unicode_ci NOT NULL,
  `
passwordvarchar(32COLLATE utf8_unicode_ci NOT NULL,
  `
emailvarchar(150COLLATE utf8_unicode_ci NOT NULL,
  `
full_namevarchar(150COLLATE utf8_unicode_ci NOT NULL,
  `
statustinyint(1NOT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=

Chúc các bạn thành công.