Zend学习杂谈–Zend_Auth身份认证

2007-8-28  08:08

用户表:

SQL代码
  1. CREATE TABLE `user` (  
  2. `uid` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
  3. `username` VARCHAR( 20 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ,  
  4. `passwordCHAR( 32 ) NOT NULL ,  
  5. `role` ENUM( ‘user’’staff’‘admin’ ) NOT NULL ,  
  6. `truename` VARCHAR( 20 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ,  
  7. INDEX (`role` , `truename` ) ,  
  8. UNIQUE (`username`)  
  9. ) ENGINE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci COMMENT = ‘用户表’

数据库链接文件:
./Lib/Adapter.php

PHP代码
  1. <?php  
  2. $adapter = Zend_Db::factory(‘PDO_MYSQL’array(    ‘host’ => ‘localhost’,  
  3.                                         ‘username’ => ‘root’,  
  4.                                         ‘password’ => ‘root’,  
  5.                                         ‘dbname’ => ‘text’));  
  6. $adapter->query(’set names gbk;’);  
  7. Zend_Registry::set(‘Db’$adapter);  

使用Zend_Auth进行身份认证:

PHP代码
  1. <?php  
  2. require ‘./Zend/Loader.php’;  
  3. function __autoload($class)  
  4. {  
  5.     Zend_Loader::loadClass($class);  
  6. }  
  7. //以上为包含文件  
  8. $auth = Zend_Auth::getInstance();//->setStorage(new Zend_Auth_Storage_Session(’Zend_Auth’));  
  9. //身份的持久是自动发生的,因此此举等于$auth = Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_Session(’Zend_Auth’));  
  10. if($auth->hasIdentity())  
  11. {  
  12.       echo ‘已经登录过了!<br/>’;  
  13.     $session = $auth->getStorage()->read();  
  14.       echo ‘显示用户组: ’ . $auth->getStorage()->read()->role . ‘<br/>’;  
  15.       return;  
  16. }  
  17.   
  18. //若没有登录则完成登录(下面操作)  
  19. require ‘./Lib/Adapter.php’;  
  20. $auth_adapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get(‘Db’), ‘user’‘username’‘password’‘md5(?)’);  
  21. $result = $auth->authenticate($auth_adapter->setIdentity(‘zhangsilly’)->setCredential(‘123456789′));  
  22. $auth->getStorage()->write($auth_adapter->getResultRowObject(null, ‘password’));  
  23. echo ‘登录完毕<br/>’;  
  24. echo ‘显示用户组: ’ . $auth->getStorage()->read()->role . ‘<br/>’;   


注意:$auth_adapter = new Zend_Auth_Adapter_DbTable(Zend_Registry::get(‘Db’), ‘user’, ‘username’, ‘password’, ‘md5(?)’); 这一句,如果采用和手册一样的写法$credentialTreatment 给 md5    认证是无法成功的!

发表评论