Zend_Auth主要用來認證身份,Zend_Auth可以經由authenticate方法傳入特定的Auth Adapter(例如Zend_Auth_Adapter_Ldap或Zend_Auth_Adapter_DbTable),以便控制與哪方面的身份資料介接
LDAP Auth
application.ini(只列出LDAP設定檔部份)
..... [ldap] ldap.master.host = "ldap.com" ldap.master.port = "636" ldap.master.username = "uid=webauth,ou=netgroup,dc=test,dc=org,dc=tw" ldap.master.password = "123" ldap.master.bindRequiresDn = true ldap.master.baseDn = "dc=test,dc=org,dc=tw" ldap.master.useSsl = true .....
LoginController.php
$params = $this->_request->getParams(); //建立Zend_Auth Instance $auth = Zend_Auth::getInstance(); //自訂session namespace,預設的namespace為Zend_Auth $auth->setStorage(new Zend_Auth_Storage_Session('TEST')); //設定timeout(秒)需要再透過Zend_Session $authSession = new Zend_Session_Namespace('TEST'); $authSession->setExpirationSeconds(100); //判斷是否有Identity(已登入) if ($auth->hasIdentity()) { $this->_redirect('/'); } if (!empty($params['account']) && !empty($params['passwd'])) { //讀入application.ini LDAP的設定檔 $config = new Zend_Config_Ini(dirname(__DIR__) . '/configs/application.ini', 'ldap'); //ldap server可以設定為多台 $ldap = $config->ldap->toArray(); //建立LDAP的Auth_Adapter $adapter = new Zend_Auth_Adapter_Ldap($ldap, $params['account'], $params['passwd']); $result = $auth->authenticate($adapter); //取得LDAP的Auth_Adapter log print_r($result->getMessages()); //取得result code /* result code分類 Zend_Auth_Result::SUCCESS Zend_Auth_Result::FAILURE Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID Zend_Auth_Result::FAILURE_UNCATEGORIZED */ $code = $result->getCode(); //登入判斷 if (Zend_Auth_Result::SUCCESS === $code) { //透過Auth_Storage可以寫入自行定義資訊 $storage = $auth->getStorage(); $storage->write(array('A'=>'Johnson','B'=>'Maple')); $this->_redirect('/'); } else { echo "Error Code:".$code; } }
IndexController
$auth = Zend_Auth::getInstance(); //設定name space $auth->setStorage(new Zend_Auth_Storage_Session('TEST')); //取得Identity值 print_r($auth->getIdentity()); //清空Identity(登出) $auth->clearIdentity();
注意,因為Zend_Auth只用來做身份認證,所以如果要取得LDAP裡的其他資訊,請使用Zend_Ldap
DB Auth
application.ini
resources.db.adapter = "PDO_MYSQL" resources.db.params.dbname = "" resources.db.params.host = "localhost" resources.db.params.username = "" resources.db.params.password = "" resources.db.params.driver_options.1002 = "SET NAMES utf8" resources.db.isDefaultTableAdapter = true
controller
$dbAdapter = Zend_Db_Table::getDefaultAdapter(); $auth = Zend_Auth::getInstance(); //DB Auth $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); //define column $authAdapter->setTableName('table_name') ->setIdentityColumn('account_column') ->setCredentialColumn('passwd_column'); //DB中存的是MD5編碼,可以自動做密碼編碼後的驗證 ->setCredentialTreatment('MD5(?)'); //define value $authAdapter->setIdentity($account) ->setCredential($password); $result = $auth->authenticate($authAdapter);