/** * 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('Вход')); }