2012-01-25 2 views
5

Я сделал систему входа через ZEND AUTH Вот кодZend сессии и Зенд аутентификации

// 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'); 
     } 
    } 

Эта работа в настоящее время штраф. В user (table) есть user_id (столбец), где есть имя пользователя и пароль. Мне нужно, чтобы получить эту конкретную user_id из этой таблицы, только логин и поместить его в сессии через

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

так, что я могу запросить некоторую информацию от этого $ user_id и передать результат в поле зрения (имя) ControlPanel

+1

Почему вы хотите провести сеанс вручную? Он будет создавать сеанс после входа в систему, и вы можете получить это из хранилища. –

+0

@Teez как я могу получить user_id из памяти ??? –

+1

$ data = Zend_Auth :: getInstance() -> getStorage() -> read(); $ this-> view-> имя пользователя = $ data-> имя_пользователя; $ this-> view-> id = $ data-> user_id; –

ответ

8

Получить идентификатор пользователя из хранилища:

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

echo $userInfo->user_id; 
3

Вы можете получить доступ к данным как Teez предлагают или просто вытащить его из Zend_Session_Namespace.

15.1.3.1. Устойчивость по умолчанию в сеансе PHP
По умолчанию Zend_Auth обеспечивает постоянное сохранение идентификатора из успешной попытки аутентификации с использованием сеанса PHP. При успешной попытке аутентификации Zend_Auth :: authenticate() сохраняет идентификатор из результата аутентификации в постоянное хранилище. Если не настроен, Zend_Auth использует класс хранения с именем Zend_Auth_Storage_Session, который, в свою очередь, использует Zend_Session. Пользовательский класс может вместо этого использоваться, предоставляя объект, который реализует Zend_Auth_Storage_Interface для Zend_Auth :: setStorage().

Zend_Auth_Storage_Session использует пространство имен сеанса 'Zend_Auth'. Это пространство имен может быть переопределено путем передачи другого значения в конструктор объекта Zend_Auth_Storage_Session, и это значение является внутренним , переданным конструктору Zend_Session_Namespace. Это должно быть до попытки аутентификации, поскольку Zend_Auth :: authenticate() выполняет автоматическое хранение идентификатора .

+0

thanx для информации sir –

+0

какой отличный ответ. Это решило мою проблему. Спасибо вам :-) –

8

Хотя на это уже был дан ответ, я предпочитаю использовать функцию getIdentity() чаще, чем цепь getStorage()->read(). Примеры ниже.

// 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

Это мой подход, и он с работает хорошо: 1-я начать с определения функции инициализации в загрузчике

protected function _initSession() 
{ 

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

/* в Вход действия, после правильного имени пользователя & 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

не забудьте очистить/параметризовать электронную почту пользователя перед таким запросом;) – Asmodiel

2

присваивающего массив к сессии, вы должны предоставить имя сессии, создающую вас область, то есть вы должны сделать setStorage, прежде чем делать getStorage.

вы должны написать такой код:

// 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'); 
     } 
    } 

, а затем получить значение для хранения, вы должны использовать это:

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

и вы получите все, что в $ Y как объект.

Наслаждайтесь!

0
пользователь = Zend_Auth :: getInstance() -> getIdentity(); if (! @ $ This-> user) { $ objSession-> errorMsg = "Пожалуйста, сначала войдите!!"; $ this -> _ redirect ('/ user/login'); } ?>
+0

используйте этот код с модификацией в соответствии с данными ур –