Beispiel #1
0
 /**
  * Action - login
  * user authentication
  * 
  * Access to the action is possible in the following paths:
  * - /admin/user/login
  *
  * @return void
  */
 public function loginAction()
 {
     $result = true;
     $message = NULL;
     //----------------------
     // Получим обьект авторизации пользователя
     $auth = Zend_Auth::getInstance();
     // Получим параметры запроса
     $request = $this->getRequest();
     $params = $request->getParams();
     //Создадим обьект формы
     $loginForm = new Default_Form_UserLogin();
     $urlAction = $this->getUrl('login', 'user', 'admin');
     $loginForm->setAction($urlAction);
     $redirect = $params['redirect'];
     //Проверим правильность заполнения полей формы
     if ($loginForm->isValid($params)) {
         $db = Zend_Registry::get('db');
         // Найдем пользователя по его имени
         $user = new Default_Model_DbTable_User($db);
         $username = $loginForm->getValue('username');
         if ($user->loadByUsername($username)) {
             // Определим актуальность пользователя на сайте
             // setup the authentication adapter
             $adapter = new Zend_Auth_Adapter_DbTable($db, 'users', 'username', 'password', '?');
             $password = $loginForm->getValue('password');
             $password = $password;
             $adapter->setIdentity($username);
             $adapter->setCredential($password);
             // Проверим правильность аутентификации
             $result = $auth->authenticate($adapter);
             if ($result->isValid()) {
                 //ОК - вход пользователя прошел успешно
                 //--- Проверим актуальность пользователя ---
                 //Получим данные о пользователе
                 $user = new Default_Model_DbTable_User($this->db);
                 $user_id = $adapter->getResultRowObject()->id;
                 $user->load($user_id);
                 // Очистим данные идентификации пользователя
                 $auth->clearIdentity();
                 // Сохраним обьект идентификации пользователя
                 // и перейдем на действие завершения авторизации
                 $user->loginSuccess();
                 // Создадим обьект идентификации пользователя
                 // и запишем его в сессию пользователя
                 $identity = $user->createAuthIdentity();
                 $auth->getStorage()->write($identity);
                 // Перейдем на страницу, которую запрашивал пользователь
                 // или на его авторскую страницу
                 $this->_redirector->gotoUrl($redirect, array('prependBase' => FALSE));
             } else {
                 //ERROR - ошибка валидации параметров входа
                 // record failed login attempt
                 Default_Model_DbTable_User::LoginFailure($username, $result->getCode());
                 $message = array($this->Translate("Ошибка регистрации! Имя или пароль клиента заданы неверно."));
             }
         } else {
             //ERROR - нет такого пользователя
             // record failed login attempt
             Default_Model_DbTable_User::LoginFailure($username, Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND);
             $message = array($this->Translate("Ошибка регистрации! Имя клиента задано неверно."));
         }
     } else {
         //ERROR - неверно введены параметры формы
         $message = $this->getFormMessages($loginForm);
     }
     if ($message) {
         $this->view->class_message = 'warning';
         $this->view->message = $message;
     }
     //Добавим путь к действию
     $this->_breadcrumbs->addStep($this->Translate('Вход'));
 }