Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Zend Framework

Recommended Posts

Fabyo... estou tendo um problema em rodar essa aplicação de login.......

todo os outro exemplos que você deu... funcionou sem problema.......

pode me ajudar???

 

 

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' in /var/www/library/Zend/Session.php:427 Stack trace: #0 /var/www/library/Zend/Session/Namespace.php(124): Zend_Session::start(true) #1 /var/www/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace->__construct('Zend_Auth') #2 /var/www/library/Zend/Auth.php(91): Zend_Auth_Storage_Session->__construct() #3 /var/www/library/Zend/Auth.php(133): Zend_Auth->getStorage() #4 /var/www/application/controllers/plugins/SecurityPlugin.php(8): Zend_Auth->hasIdentity() #5 /var/www/library/Zend/Controller/Plugin/Broker.php(260): SecurityPlugin->routeShutdown(Object(Zend_Controller_Request_Http)) #6 /var/www/library/Zend/Controller/Front.php(903): Zend_Controller_Plugin_Broker->routeShutdown(Object(Zend_Controller_Request_Http)) #7 /var/www/library/Zend/Controller/Front.php(214): Zend_Controller_Front->dispatch() #8 /var/www/index.php(46): Zend_Controller_Front::run('application/co in /var/www/library/Zend/Session.php on line 427

 

você mudou alguma coisa do exemplo?

isso acontece quando se da algum echo antes do header ou session

Compartilhar este post


Link para o post
Compartilhar em outros sites
Fabyo estou testando o Sistema de Login, fiz os ajustes e consegui logar beleza, porém na hora que redireciona

para a página index.js Firebug acusa um erro nesta página.

 

Ext.menu.RangeMenu is undefined - ext.js linha 7

Ext.menu.RangeMenu.prototype.icons = {

 

O que está errado?

 

isso tem haver com um plugin de pesquisar no grid, se nao tiver usando só apagar a linha que inclui esse js

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande fabyo.. muito bom esse esquema de autenticacao.

Só que na realidade pode ter uma falha de segurança desse jeito, pois ali no arquivo SecurityPlugin.php onde você dá o setRedirect ele só irá redirecionar para outra página depois de ser executado o método de seu controller. Ou seja, o usuário que não estiver logado, ainda vai poder executar o método (mesmo que ele seja redirecionado para a página de login, pois o redirect só acontece no final do processo).

Teste por exemplo em qualquer método de seu controller dar um echo 'alguma_coisa' e depois exit(). (onde ele mata o script).

você vai ver q ele nem vai dar o redirect e vai morrer no método do controller mesmo (ou seja, o controller foi executado).

Para não ter esse tipo de problema modifiquei o setRedirect pelo header('Location:') do php mesmo. e um exit logo apos o header para poder matar mesmo o script e nao executar nada depois.

 

//$this->getResponse()->setRedirect($sBaseUrl . '/login/', 302);

header('Location: ' . $sBaseUrl . '/login');

exit;

 

Não sei se tem como configurar esse setRedirect do zend para ser executado logo que é chamado, mas como ele só é executado depois de processar o método no controller, não seria uma boa utiliza-lo como meio de segurança.

Não tem falha de segurança nao, porque ele só ira entrar no modulo se o usuario tive logado, senao ele sempre vai cair no login, mesmo que ele tente acessar outra pagina ele vai pro login

 

e caso queria que seja redirecionado antes você pode mudar o metodo e chamar na hora que achar melhor

 

por exemplo em vez de usar o routeShutdown use routeStartup

 

mas como falei o metodo routeShutdown é chamado no plugin antes do run ou dispatch

 

Então na realidade, a questão não é nem no routeShutdown ou routeStartup, e sim no método setRedirect do objeto Response.

o método setRedirect ao que me parece somente faz o redirect após a página ser processada. De certa forma, o usuário é redirecionado para a página de login, PORÉM, o método que ele chamou do controller no qual ele não tem acesso, é executado.

Crie por exemplo um método em algum controller que o usuário não tenha acesso, e manda matar a aplicação, algo do tipo

 

public function metodoProtegidoAction(){
   die('consegui executar o metodo protegido');
}

Ao acessar o controller chamando o metodo-protegido, você verá que ele é executado. Ou seja, embora o usuário seja redirecionado para a página de login, o método que ele chama no controller ainda é executado. Foi aí que utilizei ao invés do setRedirect o header('Location:...').

Pode ser que tenha algum tipo de configuração no setRedirect que faz o redirect logo quando é chamado, mas não consegui encontrar nada a respeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza entendi o que você tava falando, vou ver se acho como fazer ele ser executado na hora, senao use o header mesmo

 

acredito que ele nao execute na hora por causa de cache e para nao dar problema de output na pagina

 

mas deve ter um jeito direto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel descobri o problema e resolvi usando o proprio Zend

 

$response = $oFrontController->getResponse();

$response->setRedirect($sBaseUrl . '/login/');

$response->sendHeaders();

exit;

 

com isso nao ira ser executado mais nada e ira direto para o login.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola fabyo o meu problema é que antes de colocar a pasta zend dentro de library dava o erro de loader.php que esta dentro dessa pasta zend baxei o arquivo e coloquei dentro de library e ai comecou a dar que a página não existe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Daniel descobri o problema e resolvi usando o proprio Zend

 

$response = $oFrontController->getResponse();

$response->setRedirect($sBaseUrl . '/login/');

$response->sendHeaders();

exit;

 

com isso nao ira ser executado mais nada e ira direto para o login.

Perfeito! Eu estava usando o header(Location...) justamente pq desconhecia esse metodo do objeto Request. Vou mudar na aplicacao, já que usando o header location eh um método "não zend de resolver as coisas" rsrsr.

 

Valew Fabyo

Compartilhar este post


Link para o post
Compartilhar em outros sites

a pasta que baixei ta com nome "ZendFramework-1[1].7.8" dentro dela tem outra pasta com nome "ZendFramework-1.7.8" e ae sim os arquivos ou seja monte de pastas inclusive uma pasta library com a pasta zend eu so copie a pasta zend e colei dentro de library do arquivo que você disponibilizou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Fábio! Tudo jóia parceiro?

 

Então cara, sistema show de bola... parabéns! Mas ta acontecendo um erro aqui pra mim na hora de logar

 

Erro Sistema, Adapter name must be specified in a string

 

Eu me vi obrigado a trocar no model, no controller e no ext-ux-login.js todas as ocorrencias "nome" por "login", pode ser esse o problema?

Obrigadão cara! E se tiver um tempinho coloca mais uns tutoriais que só você sabe ministrar!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa

 

então se voce trocou e funcionou deve ser isso mesmo, talves foi algum erro meu na hora de editar o arquivo esqueci de mudar isso, mas como ninguem reclamou acabei nem percebendo

 

e sobre outros tutoriais vou fazer sim

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, isso não é bem um problema nem nada.. mas sim uma dúvida básica!

 

Eu tenho dois módulos aqui! Admin e Default! Do qual funcionam perfeitamente!

A pasta models é compartilhada pelos 2 módulos!

Então como restringir apenas para o módulo admin o acesso?

Eu tentei alterar primeiramente no meu bootstrap e depois no SecurityPlugin mas não obtive sucesso!

 

Pode me dar uma luz em relação a isso? O sisteminha ta todo pronto.. mas inteiramente bloqueado hhehehe

 

Mais uma vez meu muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce ja usou ZEND_ACL?

 

http://framework.zend.com/manual/en/zend.acl.html

 

é a melhor opção pra fazer isso

 

mas claro se quiser fazer na mao você pode fazer no proprio SecurityPlugin e recuperar o usuario e pegar o campo Nivel_Acesso e testar se for permitido você libera

 

se precisar de ajuda qualquer um dos jeitos, só falar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito interessante! Já tinha ouvido falar do ACL mas não sabia que ele servia pra isso!

Então só deixa eu ver se entendi! Pra mim exibir as páginas publicas (no meu caso o Default) eu tenho que fazer mais ou menos isso?

 

* nível 0, 1, 2, 3 ->módulo default (paginas publicas)

 

* nível 3 (por exemplo) -> módulo admin

 

Eu vou dar uma estudada nele lá agora. Fiquei realmente interessado nisso, pois como esse site é pequeno eu nem tinha pensado em definir níveis nem nada!

 

Valeu mais uma vez Fabyo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o campo nivel de acesso é para esse caso mais simples

 

o ACL você define o nivel geral do usuario, onde ele pode ou nao acessar, ou se ele pode salvar/editar/excluir etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.