Zend сессия и Zend Auth - PullRequest
       42

Zend сессия и Zend Auth

5 голосов
/ 25 января 2012

Я сделал систему входа в систему через Zend Auth вот код

// 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 и передать результат в контрольную панель представления (имя)

Ответы [ 6 ]

8 голосов
/ 09 мая 2012

Хотя на этот вопрос уже отвечали, я склонен использовать функцию 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;
8 голосов
/ 25 января 2012

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

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

echo $userInfo->user_id;
3 голосов
/ 25 января 2012

Вы можете получить доступ к данным так, как предлагает 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 () выполняет автоматическое сохранение идентификатора.

2 голосов
/ 31 июля 2013

назначая массив сеансу, вы должны указать имя сеанса, который вы создаете, т.е. вы должны выполнить 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 как объект.

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

1 голос
/ 05 июня 2013

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

protected function _initSession()
{

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

/ * в действии Login, после правильного имени пользователя & 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 голосов
/ 08 октября 2014
user = Zend_Auth :: getInstance () -> getIdentity (); если (! @ $ this-> пользователь) { $ objSession-> errorMsg = "Пожалуйста, сначала войдите в систему ..!"; $ Это -> _ редирект ( '/ пользователь / Войти'); } ?>
...