O łączeniu frameworku Zenda z ORM Doctrine wiele w internecie napisano. Ale trzeba pamiętać że wiele bibliotek zawartych w frameworku również może wymagać połączenia z bazą danych, a domyślnie wymagają użycia Zend_Db_Table. Na szczęście taka sytuacja została przewidziana przez twórców którzy udostępnili odpowiedni zestaw interface’ów umożliwiając w ten sposób tworzenie własnych adapterów a tym samym dostosowanie komponentów wedle własnych zachcianek.
Jak połączyć Doctrine i Zend_Session napisał Zyx na swoim blogu(www.zyxist.com). W podobny sposób można podpiąć Zend_Auth, ale klasa już została napisana i można ją pobrać stąd Zend_Auth_Adapter_Doctrine_Table. Do tego miejsca wszystko jest jasne i proste, dziwi mnie za to trochę sposób używania tego w aplikacji.
Zakładając że mamy prostą tabele użytkowników opisaną następująco

WebsiteUser:
  tableName: website_users
  columns:
    UserId:   { type: integer(8), primary: true, autoincrement: true }
    GroupId:  { type: integer(8), notnull: true  }
    Username: { type: string(255), notnull: true }
    Password: { type: string(255), notnull: true }
    Email:    { type: string(255), notnull: true }
  indexes:
    uniqueusername: { fields: [Username], type: unique }
    uniqueemail:    { fields: [Email], type: unique    }
  relations:
    WebsiteGroup: { class: RuczajGroup, local: GroupId, foreign: GroupId }
  options: { type: INNODB, collate: utf8_polish_ci, charset: utf8 }

to ustawienia nazwy tabeli i pól wygląda dość dziwnie, mianowicie nazwa tabeli nie jest faktyczną nazwą tabeli tylko czymś w rodzaju nazwy encji. Pola też należy pisać dokładnie takimi samymi literami(chodzi o wielkość) jak w pliku YAML, mimo że tworzone tabele składają się wyłącznie z małych liter. W sumie wydaje się to logiczne, ale trochę czasu mi zajęło dojście co oni tak naprawdę chcą a wyjątek typu
('The supplied parameters to Zend_Auth_Adapter_Doctrine_Record failed to produce a valid sql statement, please check table and column names for validity'); nie podpowiada zbyt wiele.

Poprawny kod autoryzacji wygląda zatem tak:

$dbConnection = Doctrine::getConnectionByTableName('website_users');
$authAdapter = new Zend_Auth_Adapter_Doctrine_Table($dbConnection);
$authAdapter->setTableName('WebsitejUser')
                  ->setIdentityColumn('Username')
    		  ->setCredentialColumn('Password')
		  ->setCredentialTreatment('md5(?)');