public function loginAction() { if ($this->isAuth()) { $this->_forward('index', 'index'); // если уже залогинен: action, controller return; } $form = new formLogin(); if ($this->_request->isPost()) { /* Проверяем валидность данных формы */ if ($form->isValid($this->_getAllParams())) { $db = Zend_Registry::get('db_bacula'); /** * Настраиваем правила выборки пользователей из БД * имя таблицы, название поля с идентификатором пользователя, название поля пароля * * [ $zendDb = null], [string $tableName = null], [string $identityColumn = null], * [string $credentialColumn = null], [string $credentialTreatment = null]) */ if (Zend_Registry::get('DB_ADAPTER') == 'PDO_SQLITE') { // Sqlite do not have MD5 function $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', '? AND active = 1'); } else { $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', 'MD5(?) AND active = 1'); } /* Передаем в адаптер данные пользователя */ $authAdapter->setIdentity($form->getValue('login')); $authAdapter->setCredential($form->getValue('pwd')); /* Собственно, процесс аутентификации */ $auth = Zend_Auth::getInstance(); $resultAuth = $auth->authenticate($authAdapter); /* Проверяем валидность результата */ if ($resultAuth->isValid()) { /* Пишем в сессию (default) необходимые нам данные (пароль обнуляем) */ $storage = $auth->getStorage(); $data = $authAdapter->getResultRowObject(array('id', 'login', 'role_id', 'role_name', 'email')); // find role name $table = new Wbroles(); $row = $table->find($data->role_id); if ($row->count() == 1) { $data->role_name = $row[0]['name']; } $storage->write($data); // обнуляем счетчик неудачных логинов if (isset($this->defNamespace->numLoginFails)) { $this->defNamespace->numLoginFails = 0; } // remember me if ($form->getValue('rememberme')) { Zend_Session::rememberMe(self::MAX_LIFETIME); Zend_Session::getSaveHandler()->setLifetime(self::MAX_LIFETIME); } // update user statistics $users = new Wbusers(); $users->updateLoginStat($data->login); // goto home page $this->_redirect('index/index'); } else { sleep(7); $this->view->msg = $this->view->translate->_("Username or password is incorrect"); // включаем счетчик, если кол-во неудачных логинов большое то включаем капчу $this->defNamespace->numLoginFails++; } } } /* Если данные не передавались или неверный логин, то выводим форму для авторизации */ $this->view->caption = sprintf($this->view->translate->_("Login with your %sWe%sbacula%s account"), '<font color="#00008B">', '</font><font color="#A80000">', '</font>'); $this->view->title = $this->view->translate->_('Login with your Webacula account'); $this->view->form = $form; // workaround for unit tests 'Action Helper by name Layout not found' if (!$this->_helper->hasHelper('layout')) { $this->render(); } }
public function loginAction() { if ($this->isAuth()) { $this->_forward('index', 'index'); // если уже залогинен: action, controller return; } $form = new formLogin(); if ($this->_request->isPost()) { /* Проверяем валидность данных формы */ if ($form->isValid($this->_getAllParams())) { $users = new Wbusers(); $login = $form->getValue('login'); if ($users->checkPassword($login, $form->getValue('pwd'))) { $user = $users->fetchUser($login); $user[0]['pwd'] = ''; // пароль обнуляем $user = (object) $user[0]; /* Пишем в сессию (default) необходимые нам данные */ $auth = Zend_Auth::getInstance(); $storage = $auth->getStorage(); // find role name $storage->write($user); // обнуляем счетчик неудачных логинов if (isset($this->defNamespace->numLoginFails)) { $this->defNamespace->numLoginFails = 0; } // remember me if ($form->getValue('rememberme')) { Zend_Session::rememberMe(self::MAX_LIFETIME); Zend_Session::getSaveHandler()->setLifetime(self::MAX_LIFETIME); } // update user statistics $users->updateLoginStat($user->login); // goto home page $this->_redirect('index/index'); } else { sleep(7); $this->view->msg = $this->view->translate->_("Username or password is incorrect"); // включаем счетчик, если кол-во неудачных логинов большое то включаем капчу $this->defNamespace->numLoginFails++; } } } /* Если данные не передавались или неверный логин, то выводим форму для авторизации */ $this->view->caption = sprintf($this->view->translate->_("Login with your %sWe%sbacula%s account"), '<font color="#00008B">', '</font><font color="#A80000">', '</font>'); $this->view->title = $this->view->translate->_('Login with your Webacula account'); $this->view->form = $form; // workaround for unit tests 'Action Helper by name Layout not found' if (!$this->_helper->hasHelper('layout')) { $this->render(); } }