Autenticando no LDAP com Zend Framework
| Tweet |
|
Sem muita enrolação teórica, se você entrou nesse post ja deve saber o que procura, sendo assim, segue o tutorial.
Adicione os dados de conexão no arquivo de configuração do Zend
application/configs/application.ini
ldap.server.host = ldap://192.168.1.6 ldap.server.accountDomainName = seudominio.com.br ldap.server.accountDomainNameShort = seudominio ldap.server.accountCanonicalForm = 2 ldap.server.username = "cn=admin,o=suaorganizacao,dc=dominio,dc=com,dc=br" ldap.server.password = "12345" ldap.server.baseDn = "ou=Usuarios,o=suaorganizacao,dc=dominio,dc=com,dc=br" ldap.server.bindRequiresDn = true
Configurações realizadas, agora basta implementar a sua controladora que irá realizar a autenticação, segue um exemplo.
application/AutenticacaoController.php
<?php
class AutenticacaoController extends Zend_Controller_Action
{
public function loginAction()
{
$auth = Zend_Auth::getInstance();
//Carrega as configurações
$config = new Zend_Config_Ini('application/configs/application.ini', 'production');
$options = $config->ldap->toArray();
//Instancia o Adaptador com a conexão LDAP
$adapter = new Zend_Auth_Adapter_Ldap($options, $this->_getParam('login'), $this->_getParam('senha'));
//Autentica
$result = $auth->authenticate($adapter);
//Verifica se a autenticação foi válida
if($result->isValid()){
//$result->getIdentity(); //Objeto de retorno da autenticação
/**
* Exemplo de storage para guardar dados na sessão
* $storage = Zend_Auth::getInstance()->getStorage();
* $storage->write($array);
*/
//Redireciona para o index
$this->_redirect('index');
}else{
$this->_redirect('autenticacao/login');
}
}
public function logoutAction()
{
Zend_Auth::getInstance()->clearIdentity();
$this->_redirect('autenticacao/login');
}
}
Para recuperar os dados salvos na sessão:
$array = Zend_Auth::getInstance()->getIdentity();

Ola, parabens pelo artigo, estou com o seguinte problema, consegui autenticar e redirecionar, o código para validação funciona na primeira página a qual é redirecionada, porém não funciona nas outras controllers da erro:
atal error: Uncaught exception ‘Zend_Controller_Response_Exception’ with message ‘Cannot send headers; headers already sent in /var/www/NVS/application/controllers/RhController.php, line 98′ in /usr/share/php5/libzend-framework-php/Zend/Controller/Response/Abstract.php:323 Stack trace: #0 /usr/share/php5/libzend-framework-php/Zend/Controller/Response/Abstract.php(341): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /usr/share/php5/libzend-framework-php/Zend/Controller/Response/Abstract.php(768): Zend_Controller_Response_Abstract->sendHeaders() #2 /usr/share/php5/libzend-framework-php/Zend/Controller/Front.php(992): Zend_Controller_Response_Abstract->sendResponse() #3 /usr/share/php5/libzend-framework-php/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #4 /usr/share/php5/libzend-framework-php/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #5 /var/www/NVS/public/index.php(26): Zend_Application->run() #6 {main} thrown in /usr/share/php5/libzend-framework-php/Zend/Controller/Response/Abstract.php on line 323
O que pode ser?