public function check() { $param = explode('?', $_SERVER['REQUEST_URI']); parse_str($param[1], $datas); if (isset($datas['user_name']) && joosString::trim($datas['user_name']) != '') { $user = new modelUsers(); $user->user_name = $datas['user_name']; $ret = $user->find() ? 0 : 1; $ret = preg_match(JUSER_NAME_REGEX, $datas['user_name']) ? $ret : false; echo $ret ? 'true' : 'false'; exit; } if (isset($datas['email']) && joosString::trim($datas['email']) != '') { $user = new modelUsers(); $user->email = $datas['email']; echo $user->find() ? 'false' : 'true'; exit; } }
/** * @static * @param $user_name * @param bool $password * @param array $params * @return string * * @todo требуется рефакторинг, модуль должен возвращать true или false */ public function login($user_name, $password = false, array $params = array()) { $params += array('redirect' => true); $return = (string) joosRequest::param('return'); if ($return && !(strpos($return, 'com_registration') || strpos($return, 'com_login'))) { //$return = $return; } elseif (isset($_SERVER['HTTP_REFERER'])) { $return = $_SERVER['HTTP_REFERER']; } else { $return = JPATH_SITE; } $user = new modelUsers(); $user->user_name = $user_name; $user->find(); // если акаунт заблокирован if (!$user->id) { if (isset($params['return'])) { return json_encode(array('error' => 'Такого пользователя нет')); } else { joosRoute::redirect($return, 'Такого пользователя нет'); } } // если акаунт заблокирован if ($user->state == 0) { if (isset($params['return'])) { return json_encode(array('error' => _LOGIN_BLOCKED)); } else { joosRoute::redirect($return, _LOGIN_BLOCKED); } } //Проверям пароль if (!self::check_password($password, $user->password)) { if (isset($params['return'])) { return json_encode(array('error' => _LOGIN_INCORRECT)); } else { joosRoute::redirect($return, _LOGIN_INCORRECT); } } // пароль проверили, теперь можно заводить сессиию и ставить куки авторизации $session = new modelUsersSession(); $session->time = time(); $session->guest = 0; $session->user_name = $user->user_name; $session->user_id = $user->id; $session->is_admin = 0; // сгенерием уникальный ID, захеширем его через sessionCookieValue и запишем в базу $session->generate_id(); // записываем в базу данные о авторизованном пользователе и его сессии $session->store(); // формируем и устанавливаем пользователю куку что он автоизован $sessionCookieName = joosSession::session_cookie_name(); // в значении куки - НЕ хешированное session_id из базы setcookie($sessionCookieName, $session->get_cookie(), false, '/', JPATH_COOKIE); // очищаем базу от всех прежних сессий вновь авторизовавшегося пользователя $query = "DELETE FROM #__users_session WHERE is_admin=0 AND session_id != " . $session->_db->get_quoted($session->session_id) . " AND user_id = " . (int) $user->id; joosDatabase::instance()->set_query($query)->query(); // обновляем дату последнего визита авторизованного пользователя $user->lastvisit_date = JCURRENT_SERVER_TIME; $user->store(); $token = new modelUsersTokens(); $token->generate_token($user->id); if (isset($params['return'])) { return json_encode(array('user' => $user)); } else { joosRoute::redirect($return); } }