2012-01-25 19 views
5

he hecho un sistema de acceso a través de autenticación Zend aquí es el códigoZend Zend sesión y autenticación

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 

     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $result = $auth->authenticate($authAdapter); 

     if($result->isValid()){ 
      $data = $authAdapter->getResultRowObject(null,'password'); 
      $auth->getStorage()->write($data); 
      $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

Este trabajo fino ahora. Hay user_id (columna) en el usuario (tabla) donde también hay nombre de usuario y contraseña. Tengo que conseguir que user_id específica de esta tabla que acaba de ingresar y ponerlo en sesión a través de

$user_session = new Zend_Session_Namespace('user_session'); 
$user_session->username = $username; 
$user_id->user_id  = $user_id; 

para que pueda consultar algo de información en contra de esta $ user_id y pasar el resultado a la vista (nombre) controlpanel

+1

¿por qué quieres poner en sesión de forma manual? Creará la sesión una vez que inicie sesión y puede obtenerla desde el almacenamiento. –

+0

@Teez ¿cómo puedo obtener user_id del almacenamiento? –

+1

$ data = Zend_Auth :: getInstance() -> getStorage() -> read(); $ this-> view-> username = $ data-> user_name; $ this-> view-> id = $ data-> user_id; –

Respuesta

8

Obtener identificador de usuario desde el almacenamiento:

$userInfo = Zend_Auth::getInstance()->getStorage()->read(); 

echo $userInfo->user_id; 
3

se puede acceder a los datos de la manera Teez sugieren o simplemente tirar de él desde Zend_Session_Namespace.

15.1.3.1. Persistencia predeterminada en la sesión de PHP
De forma predeterminada, Zend_Auth proporciona almacenamiento persistente de la identidad desde un intento de autenticación exitoso utilizando la sesión de PHP. Tras un intento de autenticación exitoso, Zend_Auth :: authenticate() almacena la identidad del resultado de autenticación en almacenamiento persistente. A menos que se configure de otra manera, Zend_Auth usa una clase de almacenamiento llamada Zend_Auth_Storage_Session, que, a su vez, usa Zend_Session. Una clase personalizada puede utilizarse en su lugar proporcionando un objeto que implementa Zend_Auth_Storage_Interface a Zend_Auth :: setStorage().

Zend_Auth_Storage_Session utiliza un espacio de nombre de sesión de 'Zend_Auth'. Este espacio de nombre puede ser anulado pasando un valor diferente al constructor de Zend_Auth_Storage_Session , y este valor es internamente pasado al constructor de Zend_Session_Namespace. Esto debería ocurrir antes de intentar la autenticación, ya que Zend_Auth :: authenticate() realiza el almacenamiento automático de la identidad .

+0

gracias por la información señor –

+0

qué gran respuesta. Solucionó mi problema. Gracias :-) –

8

Si bien esto ya fue respondido, tiendo a usar la función getIdentity() con más frecuencia que la cadena getStorage()->read(). Ejemplos a continuación.

// to check if authenticated 
Zend_Auth::getInstance()->hasIdentity(); 

// to actually get the details from storage 
Zend_Auth::getInstance()->getIdentity()->user_id; 

// if I need to use the identity over and over 
$identity = Zend_Auth::getInstance()->getIdentity(); 
$userId = $identity->user_id; 
1

Este es mi enfoque y se está trabajando agradable: 1-i empezar por definir una función init en el arranque

protected function _initSession() 
{ 

    $UserSession = new Zend_Session_Namespace('UserSession'); 
    $UserSession->setExpirationSeconds(/* you may fix a limit */); 
    Zend_Registry::set('UserSession', $UserSession); 
} 

/* en la acción de sesión, después de nombre de usuario correcto & PWD */

// Create session 
    $UserSession = Zend_Registry::get('UserSession'); 
// Get the user from database 
$db = Zend_Db_Table::getDefaultAdapter(); 
$user = $db->fetchRow("SELECT * FROM user_table WHERE user_email = '".$user_email."'"); 

//then you assign to $user to $UserSession variable : 
$UserSession->user = $user; 

//finaly don't forget to unset session variable in the Logout action ... 
+0

recuerde higienizar/parametrizar el correo electrónico del usuario antes de dicha consulta;) – Asmodiel

2

asignar una matriz a una sesión, debe proporcionar un nombre a la sesión que el área de la creación, es decir, que debe hacer antes de hacerlo setStorage getStorage.

debe escribir el código de la siguiente manera:

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 


     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $authAdapter->setStorage(new Zend_Auth_Storage_Session('User_Auth')); 
     $result = $auth->authenticate($authAdapter); 
     if($result->isValid()){ 
     $data = $authAdapter->getResultRowObject(null,'password'); 
     $auth->getStorage()->write($data); 
     $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

y después de obtener su valor de almacenamiento, debe utilizar esto:

$x = new Zend_Auth_Storage_Session('User_Auth'); 
$y = $x->read(); 

y conseguir todo en $ y como un objeto.

¡Disfrútalo!

0
usuario = Zend_Auth :: getInstance() -> getIdentity(); if (! @ $ This-> user) { $ objSession-> errorMsg = "Por favor inicie sesión primero ...!"; $ this -> _ redirigir ('/ usuario/login'); } ?>
+0

utilice este código con modificar según sus datos –