Zend_Auth - когда я устанавливаю собственное пространство имен хранилища, оно не существует, когда я перенаправляю на новый контроллер
В моем entry
Контроллер, который я установил:
Это работает:
$authadapter = new Test_Auth_Adapter_DbTable($db);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authadapter);
$data = $authadapter->getResultRowObject(null, 'password');
$auth->getStorage()->write($data);
$this->_redirector->gotoUrl('/main');
Это не:
$authadapter = new Test_Auth_Adapter_DbTable($db);
$auth = Zend_Auth::getInstance();
$auth->setStorage(new Zend_Auth_Storage_Session('Test_User')); //the only difference
$result = $auth->authenticate($authadapter);
$data = $authadapter->getResultRowObject(null, 'password');
$auth->getStorage()->write($data);
$this->_redirector->gotoUrl('/main');
Я вижу, что он установлен в переменной $_SESSION со всеми правильными данными, когда я использую отладчик, но после того, как данные настроены, и я перенаправляю в нужное место назначения, переменная $_SESSION больше не устанавливается, поэтому я не могу получить доступ к вещам!
Страница перенаправляется на проверку аутентификации с помощью:
$this->auth = Zend_Auth::getInstance();
if (!$this->auth->hasIdentity()) {
$this->_redirector->gotoUrl('/entry');
}
Почему это не работает?
1 ответ
Попробуй это:
$this->auth = Zend_Auth::getInstance();
$this->auth->setStorage(new Zend_Auth_Storage_Session('Test_User'));
if (!$this->auth->hasIdentity()) {
$this->_redirector->gotoUrl('/entry');
}
проблема в том, что если вы не установите класс хранилища, он по умолчанию будет использовать Zend_Auth_Storage_Session с пространством имен Zend_Auth. А поскольку данные вашего сеанса не находятся в этом пространстве имен, Zend_Auth не видит их и ведет себя так, как будто пользователь не вошел в систему.
В зависимости от того, как структурировано ваше приложение (и насколько большой его частью является аутентификация), вы можете захотеть сделать это в методе начальной загрузки, поэтому вам придется сделать это только один раз:
protected function _initAuth()
{
$auth = Zend_Auth::getInstance();
$auth->setStorage(new Zend_Auth_Storage_Session('Test_User'));
return $auth;
}