#zend的controller的_redirect之後的敘述不會執行
#Zend_Auth的使用者驗證是透過實作Zend_Auth_Adapter_Interface的類別來進行,實際上是實作Zend_Auth_Adapter_Interface介面裡的authenticate方法,而且這個authenticate方法必須傳回Zend_Auth_Result的實體。
一般是透過資料庫資料進行使用者驗證,ZF有實作一個Zend_Auth_Adapter_DbTable類別來操作。在進行驗證之前必須先指定資料庫連線物件、資料表名稱、帳號欄位、密碼欄位及如何處理從表單傳入的密碼,這可以依序是Zend_Auth_Adapter_DbTable類別的建構參數,也可以稍後透過setTableName、setTableName、setCredentialColumn及setCredentialTreatment等方法來指定。例如
$authAdapter = new Zend_Auth_Adapter_DbTable(
$dbAdapter, //資料庫連線物件
‘users’, //使用者帳號資料表
‘username’, //帳號欄位名稱
‘password’ , //密碼欄位名稱
‘md5(?)’ //處理傳入密碼的方法,非必要
);
// …or configure the instance with setter methods
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName(‘users’)
->setIdentityColumn(‘username’) //帳號欄位名稱
->setCredentialColumn(‘password’) //密碼欄位名稱
->setCredentialTreatment(‘md5(?)’); //處理傳入密碼的方法,非必要
上述「md5(?)」實際上是將傳入的密碼值套用到?的位置,若不設此項目,則代表使用原始傳入密碼去做比對。此設定還可以做進階的操作,例如,若是要透過activate欄位來控制使用者帳號的啟用與否,則此項目可以設為md5(?) and activate = 1
至於從表單傳來的帳號及密碼,則透過setIdentity及setCredential來指定。例如
$authAdapter->setIdentity($_POST[‘username’])
->setCredential($_POST[‘password’]);
原始資料請見:http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html