(41) 9225-6319
contato@felipemarques.com.br

Zend Framework 1.11 + Zend_Auth_Adapter_DbTable + Microsoft SQL SERVER 2008 + Problema

Estava dando erro na minha controller de login no Framework da Zend, e esta dando o seguinte erro:

“failed to produce a valid sql statement, please check table and column names for validity”

Conforme código abaixo:

<br />
_redirect(&#8216;auth/login&#8217;);<br />
    }</p>
<p>    public function loginAction()<br />
    {<br />
    	// Verifica se foi submetido via POST<br />
		if(!$this-&gt;_request-&gt;isPost() )<br />
		{<br />
			//echo &#8216;nao houve post&#8217;;<br />
		}<br />
		else<br />
		{<br />
			$data = $this-&gt;getRequest()-&gt;getPost();</p>
<p>			// pegamos o adaptador padrao do banco de dados<br />
			$dbAdapter = Zend_Db_Table::getDefaultAdapter();<br />
			// pegamos o zend_auth<br />
			$auth = Zend_Auth::getInstance();</p>
<p>			/**<br />
			* Instancia o Auth Db Table Adapter<br />
			*<br />
			* Quando se instancia este objeto, precisamos informar as configurações<br />
			* do BD, nome da tabela onde os dados de login estão, o campo do nome<br />
			* do usuário, e o campo da senha na tabela.<br />
			*/<br />
			$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);<br />
			$authAdapter-&gt;setTableName(&#8216;usuarios&#8217;)<br />
						-&gt;setIdentityColumn(&#8216;login&#8217;)<br />
						-&gt;setCredentialColumn(&#8216;senha&#8217;)<br />
						-&gt;setCredentialTreatment(&#8220;sha1(?)&#8221;)<br />
						-&gt;setIdentity($data[&#8216;usuario&#8217;])<br />
						-&gt;setCredential($data[&#8216;senha&#8217;]);</p>
<p>			$result = $auth-&gt;authenticate($authAdapter);</p>
<p>            if($result-&gt;isValid())<br />
            {<br />
            	$this-&gt;view-&gt;mensagem = &#8216;ok autenticado!&#8217;;</p>
<p>            	//Armazena os dados do usuário em sessão, apenas desconsiderando<br />
                //a senha do usuário<br />
                $info = $authAdapter-&gt;getResultRowObject(null, &#8216;senha&#8217;);</p>
<p>                $storage = $auth-&gt;getStorage();<br />
                $storage-&gt;write($info);<br />
                //Redireciona para o Controller protegido<br />
                return $this-&gt;_helper-&gt;redirector-&gt;goToRoute( array(&#8216;controller&#8217; =&gt; &#8216;index&#8217;), null, true);</p>
<p>            }<br />
            else<br />
            {<br />
            	$this-&gt;view-&gt;erro = &#8216;Usuário ou senha inválidos!&#8217;;<br />
            }</p>
<p>		}<br />
    }</p>
<p>    public function logoutAction()<br />
    {<br />
    	$auth = Zend_Auth::getInstance();<br />
    	$auth-&gt;clearIdentity();<br />
    	return $this-&gt;_redirect(&#8216;/&#8217;);<br />
    }</p>
<p>}</p>
<p>

Consegui resolver o problema assim:

<br />
_redirect(&#8216;auth/login&#8217;);<br />
    }</p>
<p>    public function loginAction()<br />
    {<br />
    	// Verifica se foi submetido via POST<br />
		if(!$this-&gt;_request-&gt;isPost() )<br />
		{<br />
			//echo &#8216;nao houve post&#8217;;<br />
		}<br />
		else<br />
		{<br />
			$data = $this-&gt;getRequest()-&gt;getPost();</p>
<p>			// pegamos o adaptador padrao do banco de dados<br />
			$dbAdapter = Zend_Db_Table::getDefaultAdapter();<br />
			// pegamos o zend_auth<br />
			$auth = Zend_Auth::getInstance();</p>
<p>			/**<br />
			* Instancia o Auth Db Table Adapter<br />
			*<br />
			* Quando se instancia este objeto, precisamos informar as configurações<br />
			* do BD, nome da tabela onde os dados de login estão, o campo do nome<br />
			* do usuário, e o campo da senha na tabela.<br />
			*/<br />
			$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);<br />
			$authAdapter-&gt;setTableName(&#8216;usuarios&#8217;)<br />
						-&gt;setIdentityColumn(&#8216;login&#8217;)<br />
						-&gt;setCredentialColumn(&#8216;senha&#8217;)<br />
						/**<br />
						 * MYSQL: sha1(?) ou md5(?)<br />
						 * MSSQL: SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES(&#8216;SHA1&#8217;, ?)),3,999)<br />
						 * */<br />
						-&gt;setCredentialTreatment(&#8220;SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES(&#8216;SHA1&#8217;, ?)),3,999)&#8221;)<br />
						-&gt;setIdentity($data[&#8216;usuario&#8217;])<br />
						-&gt;setCredential($data[&#8216;senha&#8217;]);</p>
<p>			$result = $auth-&gt;authenticate($authAdapter);</p>
<p>            if($result-&gt;isValid())<br />
            {<br />
            	$this-&gt;view-&gt;mensagem = &#8216;ok autenticado!&#8217;;</p>
<p>            	//Armazena os dados do usuário em sessão, apenas desconsiderando<br />
                //a senha do usuário<br />
                $info = $authAdapter-&gt;getResultRowObject(null, &#8216;senha&#8217;);</p>
<p>                $storage = $auth-&gt;getStorage();<br />
                $storage-&gt;write($info);<br />
                //Redireciona para o Controller protegido<br />
                return $this-&gt;_helper-&gt;redirector-&gt;goToRoute( array(&#8216;controller&#8217; =&gt; &#8216;index&#8217;), null, true);</p>
<p>            }<br />
            else<br />
            {<br />
            	$this-&gt;view-&gt;erro = &#8216;Usuário ou senha inválidos!&#8217;;<br />
            }</p>
<p>		}<br />
    }</p>
<p>    public function logoutAction()<br />
    {<br />
    	$auth = Zend_Auth::getInstance();<br />
    	$auth-&gt;clearIdentity();<br />
    	return $this-&gt;_redirect(&#8216;/&#8217;);<br />
    }</p>
<p>}</p>
<p>

Espero ter ajudado, t+!!!!

Sobre o autor
Felipe Marques é Consultor e Analista de Sistemas Web e Mobile. Mais de 10 anos de experiência.
Por :
Comentários : 0

Faça um comentário

*

Facebook Auto Publish Powered By : XYZScripts.com