Aproveitando o exemplo do Zend_Auth e Zend_Acl, dei uma melhorada e fiz uma atualização para usar AJAX na pagina de login. Caso a senha nao confira, mostra o hint que foi cadastrado no banco, caso o usuario não exista, tambem exibe uma mensagem de login invalido.

paginalogin.phtml

<html>
<head>
<script type="text/javascript" src="<?php echo $this->baseUrl ?>/public/mootools.js"></script>
</head>
<script>
// Pegando os valores e montando o objeto ajax 
		function validar(){
			var usuario = $('usuario').value;   
			var senha   = $('senha').value;
			var queryString = {"usuario": usuario, "senha": senha };   
			var opcoes =   
			{   
	                             "method":"get",   
	                             "data": queryString,   
	                             "onComplete": completouSolicitacao   
			};   
			var ajaxObj = new Ajax("<?php echo $this->baseUrl ?>/Login/login", opcoes).request(); 
		}
		
		function completouSolicitacao(info){
// limpa o hint
                                      $('hint').innerHTML = "";
			var obj = Json.evaluate( info );
// Caso tenha tido erro na validacao do login
			if (obj.erro == true){
// Caso o problema tenha sido na senha
				if(obj.tipo == "senha" )
					$('hint').innerHTML = "Senha nao confere. Hint: " + obj.hint;
				else
// Caso o problema tenha sido o login invalido
					$('hint').innerHTML = "Login invalido";
			}else{
// Nao teve erros, submeter formulario
				$('frm').submit();
			}
		}
</script>
		<form name="frm" id="frm" onSubmit="return validar(this)"
			action="<? echo $this->baseUrl ?>/Login/login" method="post">
			<table>
				<tr>
					<td>
						Usuario:
					</td>
					<td>
						 <input type="text" name="usuario" id="usuario"/>
					</td>
				</tr>
				<tr>
					<td>
						Senha:
					</td>
					 <td>
						<input type="password" name="senha" id="senha" value="" />
						<label id="hint"></label>
					</td>
				</tr>
			</table>		
			<input class="botao" type="button" value="Entrar" onclick="validar();"/>
		</form>
</html>

logincontroller.php

	function paginaajaxAction(){
	}
	function loginAction()
	{
		$usuario = $this->_request->getParam("usuario");
		$senha   = $this->_request->getParam("senha");
			
		Zend_Loader::loadClass('UsuarioDAO');
		Zend_loader::loadClass("Zend_Json"); 
		Zend_Json::$useBuiltinEncoderDecoder = true;

		$dao = new UsuarioDAO();
// Verificando o cabecalho do request pra ver se é um request xml
// A maioria dos frameworks ajax implementam o cabecalho ajax, mas nao é uma
// regra, caso isso nao seja feito esse metodo nao irá funcionar.
		if($this->_request->isXmlHttpRequest()){
 // Obtem o usuario
			$usuario = $dao->recuperaPorUsuario($usuario);
// verifica se conseguiu obter
			if ($usuario){
// Caso tenha conseguido obter e a senha nao confere
				if ( $usuario->s_senha != $senha ){
					@$obj->erro = true;
					 $obj->tipo = "senha";
					 $obj->hint = $usuario->s_hint;	 
				} else {
// Caso a senha confira, nao teve erro.
					 @$obj->erro = false;			 
				}        
			}else{
// Nao conseguiu obter, logo login nao existe
			   @$obj->erro = true;
			      $obj->tipo = "logininvalido";	
			}
			
// Transforma o objeto default para JSON
                         $objJson = Zend_Json::encode( $obj );   
// coloca na camada de visao   
	            $this->view->obj = $objJson;   
// Chama o Action responsavel por ecoar o JSON
	             $this->_forward("paginaajax");
		return;
		}else{
// Fazer validacao dos campos. Por exemplo usando o Zend_Validate
			if( true ){
				$this->realizaLogin($usuario, $senha);
			} else {
// Deu erro, volta pra pagina de login
				$this->_forward('paginalogin');
				return;		
			}
		}			
		
	}//loginAction

Exemplo para download: www.guiarapido.net/public/programatik1.zip

Anúncios