Вдохновленный комментарием Хэмиша по моему вопросу, я узнал, что очень легко использовать класс Zend_Auth без необходимости использовать остальную часть фреймворка и без создания моего проекта «ZF way» - то есть с zf
инструмент командной строки и шаблон MVC.
В конце концов, я использовал только Zend_Auth и Zend_Db. Я еще не интегрировал свое доказательство концепции в свой реальный сайт, но я думаю, что он отражает основные функциональные возможности, которые я искал. Все, что он делает в данный момент, это цикл между состояниями входа в систему и выхода из нее при обновлении страницы:
require_once('Zend/Db.php');
require_once('Zend/Auth.php');
require_once('Zend/Auth/Adapter/DbTable.php');
require_once('PasswordHash.php');
require_once('PasswordHash_Auth_Adapter_DbTable.php');
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
echo 'Logged in...';
$auth->clearIdentity();
echo 'logged out.';
} else {
// authenticate
echo 'Authenticating...';
$db_options = parse_ini_file('../zend_db.ini');
$db = Zend_Db::factory('PDO_MYSQL', $db_options);
$authAdapter = new PasswordHash_Auth_Adapter_DbTable($db);
$authAdapter->setIdentity('test')->setCredential('test');
$result = $auth->authenticate($authAdapter);
if (!$result->isValid()) {
echo 'invalid.';
} else {
echo 'valid.';
}
}
PasswordHash_Auth_Adapter_DbTable.php
- это пользовательская таблица Auth_Adapter_DbTable, использующая phpass для маскировки паролей, в основном скопированная из статьи Джонатана Стрита . Я также нашел статью Александра Песляка (которую я считаю создателем phpass), которая была очень полезна для широкого понимания хранения пользователей и паролей.
Стол users
на данный момент крайне скучен:
CREATE TABLE `users` (
`id` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
`user` varchar(60) NOT NULL,
`pass` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user`)
) ENGINE=MyISAM
Я вставил одного «тестового» пользователя с хэшем, сгенерированным phpass для пароля. В конечном итоге я планирую иметь форму входа, которая отправляет пользователя / пароль для аутентификации. На первый взгляд, этот метод (простая старая форма POST) кажется небезопасным, но я посмотрел на то, как работает форма входа в Facebook, и действительно я могу видеть свой пароль в виде открытого текста как часть данных формы после входа в систему - поэтому он не может быть это небезопасно (верно?).
В целом я очень рад, насколько просто это решение ... в некотором смысле меня пугает то, как мало я понимаю действительные нюансы Zend_Auth, но в то же время я рад, что это проверенный и протестированный код ( по сравнению с моей собственной).
Если я допустил какие-либо вопиющие ошибки, сообщите мне!