Foros del Web » Programando para Internet » PHP » Zend »

Centrar la autenticacion con Zend Framework

Estas en el tema de Centrar la autenticacion con Zend Framework en el foro de Zend en Foros del Web. Buenas tardes a todos: Tengo una aplicación modular hecho con ZF y todo anda bien, solo tengo un pequeño incoveniente y es que cuando un ...
  #1 (permalink)  
Antiguo 23/09/2010, 14:30
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Centrar la autenticacion con Zend Framework

Buenas tardes a todos:

Tengo una aplicación modular hecho con ZF y todo anda bien, solo tengo un pequeño incoveniente y es que cuando un el usuario deja de usar por un un buen rato la aplicación y cuando trata de usar otra vez la aplicación le manda este error (
An error occurred
Page not found
)

Yo creo que cuando pasa esto deberia de ir a la pantalla de authenticacíón pero no lo hace.

Esto tambien sucede cuando no es toy logueado y pongo en el URL http://localhost/Administrador/public/admin/order me sale el error arriba mencionado, creo que tambien deberia ir a la pantalla de autenticación osea a http://localhost/Administrador/publi...tication/login (login).

He puesto en el default_Indexcontroller esto:

Código PHP:
function preDispatch()
    {
        
$auth Zend_Auth::getInstance();
        if (!
$auth->hasIdentity()) {
           
$this->_redirect('/authentication/login');
        }
    } 
Pero no me resuleve el problema. Alguien por favor me podria ayudar en resolver este problema. Gracias

Última edición por daniko_013; 23/09/2010 a las 14:32 Razón: mala escritura
  #2 (permalink)  
Antiguo 23/09/2010, 15:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Centrar la autenticacion con Zend Framework

Deberías de mover tu .htaccess y usar un ambiente Development así puedes ver el error completo en lugar de Application Error y te podemos ayudar más fácilmente.

Saludos.
  #3 (permalink)  
Antiguo 23/09/2010, 16:03
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework

Gracias por responder GatorV, pero ahi si me generaste otra duda como podria hacer lo que me pides, te refieres si lo deberia llevar a un servidor web o hosting??

Alguna recomendacíon?
  #4 (permalink)  
Antiguo 23/09/2010, 17:16
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework

hola GatorV hice lo q me pediste y este es el resultado despues de poner en el URL: http://localhost/Administrador/public/admin/order/new


Código:
An error occurred
Page not found
Exception information:

Message: Invalid controller specified (authenticate)
Stack trace:

#0 C:\wamp\www\testZF\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 C:\wamp\www\testZF\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 C:\wamp\www\testZF\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 C:\wamp\www\Administrador\public\index.php(26): Zend_Application->run()
#4 {main}  

Request Parameters:

array (
  'module' => 'admin',
  'controller' => 'order',
  'action' => 'new',
)
Ojala me puedas ayudar. Gracias

Saludos
  #5 (permalink)  
Antiguo 23/09/2010, 19:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Centrar la autenticacion con Zend Framework

El error es claro, no existe un controlador authenticate, revisa que tengas un archivo llamado AuthenticateController y adentro una clase authenticateController que extienda a Zend_Controller_Action.

Saludos.
  #6 (permalink)  
Antiguo 23/09/2010, 21:31
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework

si tengo el controllador AuthenticateController dentro del modulo Default, y dentro de el tengo la clase Default_AuthenticateController extends Zend_Controller_Action
con los action loginAction, logoutAction, estoy viendo todo y la verdad no encontro el problema.

Pongo el AuthenticateController:

Código PHP:
class Default_AuthenticateController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function  
preDispatch() {
            
    }
    public function 
indexAction()
    {
        
    }

    public function 
loginAction()
    {
        if(
Zend_Auth::getInstance()->hasIdentity()){
            
$this->_redirect('/index/index');
        }
        
        
$request $this->getRequest();
        
$form = new Default_Form_LoginForm();
        if(
$request->isPost()){
            if(
$form->isValid($this->_request->getPost())){
                
$authAdapter $this->getAuthAdapter();
                
$username $form->getValue('username');
                
$password $form->getValue('password');

                
$authAdapter->setIdentity($username)
                            ->
setCredential(md5($password));

                
$auth Zend_Auth::getInstance();
                
$result $auth->authenticate($authAdapter);
                if(
$result->isValid()){
                    
$identity $authAdapter->getResultRowObject();

                    
$authStorage $auth->getStorage();
                    
$authStorage->write($identity);

                    
$this->_redirect('index/index');
                }  else {
                    
$this->view->errorMessage="Usuario o Paswword Incorrectos";
                    
                }
            }
        }
        
$this->view->form $form;
        
    }

    public function 
logoutAction()
    {
        
Zend_Auth::getInstance()->clearIdentity();
        
$this->_redirect('/authenticate/login');
    }

    private function 
getAuthAdapter(){
        
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
        
$authAdapter->setTableName('user')
                   ->
setIdentityColumn('user_name')
                ->
setCredentialColumn('user_password');

        return 
$authAdapter;
    }



  #7 (permalink)  
Antiguo 23/09/2010, 22:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Centrar la autenticacion con Zend Framework

Prueba usar el helper Redirector para hacer tu redirección ya que al parecer esta tratando de tomar otro controller desde otro módulo:
Código PHP:
Ver original
  1. $this->_helper->Redirector->gotoSimple($action, $controller, $module);

Saludos.
  #8 (permalink)  
Antiguo 23/09/2010, 22:37
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework

Hola GatorV gracias por tu tiempo, el escenario d mi proyecto es como sigue:

Como ya habia comentado es modular, en el modulo Default esta todo lo q se refiere a la autenticación y una vez logueado entra al IndexController y en el indexAction lo redirecciono al indexAction del controlador OrderController del modulo admin con:
Código PHP:

class Default_IndexController extends Zend_Controller_Action
{
 public function 
indexAction()
    {
       
$this->_redirect('admin/order/');
        
    }

El codigo que me mencionas la verdad que no se en donde ponerlo, sera emplazo de $this->_redirect('admin/order/'); o en el controllador AuthencateController dentro de los Action???

saludos,
  #9 (permalink)  
Antiguo 23/09/2010, 23:43
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework (SOLUCIONADO)

Y pude resolver el problema GatorV, el tema el siguiente como hago la validacion con Zend Acl tengo un plugin en en donde se configura la inicializacion, este plugin era asi :

Código PHP:
class Default_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract{

    private 
$_acl null;

    public function  
__construct(Zend_Acl $acl) {
        
$this->_acl $acl;
      
    }
   public function  
preDispatch(Zend_Controller_Request_Abstract $request) {
        
$module $request->getModuleName();
        
$resource $request->getControllerName();
        
$action $request->getActionName();

               if(!
$this->_acl->isAllowed(Zend_Registry::get('user_role'),$module.':'.$resource$action)){
            
$request->setControllerName('authenticate')
                         ->
setActionName('login');
        }
    }
    


pero debe de ser asi:

Código PHP:
class Default_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract{

    private 
$_acl null;
   
    public function  
__construct(Zend_Acl $acl) {
        
$this->_acl $acl;
      
    }
   public function  
preDispatch(Zend_Controller_Request_Abstract $request) {
        
$module $request->getModuleName();
        
$resource $request->getControllerName();
        
$action $request->getActionName();

        if(!
$this->_acl->isAllowed(Zend_Registry::get('user_role'),$module.':'.$resource$action)){
            
$request->setModuleName('default')
                    ->
setControllerName('authenticate')
                    ->
setActionName('login');
        }
    }
    


me faltaba setear el modulo osea: $request->setModuleName('default')

Gracias por tu ayuda GatorV, pero igual espero me menciones lo de tu codigo q me brindaste como lo puedo usar.

Saludos
  #10 (permalink)  
Antiguo 24/09/2010, 09:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Centrar la autenticacion con Zend Framework

Así es, se debe de usar en lugar del $this->_redirect() te da más control sobre que acción moverte, en lugar de hardcodear el url como tal ya que se adapta a las rutas que uses.

Saludos.
  #11 (permalink)  
Antiguo 24/09/2010, 10:57
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 94
Antigüedad: 14 años
Puntos: 2
Respuesta: Centrar la autenticacion con Zend Framework

Gracias GatorV utilizaré tu recomendación para mejorar mi proyecto.

Un saludo.

Etiquetas: framework, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.