Всем привет. В общем движок сайта Osclass (доска объявлений). Хочу сделать быструю регистрацию на сайте через контакт и одноклассники. Нужно чтоб пользователи заносились в базу и имели мини личный кабинет. Или что бы пользователь определялся и мог давать объявления. Может кто помочь?
готовые платные и там что то не то. щас сделал что авторизуется и показывает инфу из вк что авторизован, но нужно чтоб определялся как пользователь и мог добавлять объявления. как это присвоить пользователю есть файл авторизации: Спойлер: Авторизация Код (Text): <?php require_once 'lib/SocialAuther/autoload.php'; require_once 'config.inc.php'; $adapterConfigs = array( 'vk' => array( 'client_id' => '5819257', 'client_secret' => 'Agdsge4wgfdhbvcdf', 'redirect_uri' => 'http://omutads.byethost16.com/auth?provider=vk' ), 'odnoklassniki' => array( 'client_id' => '', 'client_secret' => '', 'redirect_uri' => 'http://localhost/auth?provider=odnoklassniki', 'public_key' => 'CBADCBMKABABABABA' ) ); $adapters = array(); foreach ($adapterConfigs as $adapter => $settings) { $class = 'SocialAuther\Adapter\\' . ucfirst($adapter); $adapters[$adapter] = new $class($settings); } if (isset($_GET['provider']) && array_key_exists($_GET['provider'], $adapters) && !isset($_SESSION['user'])) { $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]); if ($auther->authenticate()) { $result = mysql_query( "SELECT * FROM `users` WHERE `provider` = '{$auther->getProvider()}' AND `social_id` = '{$auther->getSocialId()}' LIMIT 1" ); $record = mysql_fetch_array($result); if (!$record) { $values = array( $auther->getProvider(), $auther->getSocialId(), $auther->getName(), $auther->getEmail(), $auther->getSocialPage(), $auther->getSex(), date('Y-m-d', strtotime($auther->getBirthday())), $auther->getAvatar() ); $query = "INSERT INTO `users` (`provider`, `social_id`, `name`, `email`, `social_page`, `sex`, `birthday`, `avatar`) VALUES ('"; $query .= implode("', '", $values) . "')"; $result = mysql_query($query); } else { $userFromDb = new stdClass(); $userFromDb->provider = $record['provider']; $userFromDb->socialId = $record['social_id']; $userFromDb->name = $record['name']; $userFromDb->email = $record['email']; $userFromDb->socialPage = $record['social_page']; $userFromDb->sex = $record['sex']; $userFromDb->birthday = date('m.d.Y', strtotime($record['birthday'])); $userFromDb->avatar = $record['avatar']; } $user = new stdClass(); $user->provider = $auther->getProvider(); $user->socialId = $auther->getSocialId(); $user->name = $auther->getName(); $user->email = $auther->getEmail(); $user->socialPage = $auther->getSocialPage(); $user->sex = $auther->getSex(); $user->birthday = $auther->getBirthday(); $user->avatar = $auther->getAvatar(); if (isset($userFromDb) && $userFromDb != $user) { $idToUpdate = $record['id']; $birthday = date('Y-m-d', strtotime($user->birthday)); mysql_query( "UPDATE `users` SET " . "`social_id` = '{$user->socialId}', `name` = '{$user->name}', `email` = '{$user->email}', " . "`social_page` = '{$user->socialPage}', `sex` = '{$user->sex}', " . "`birthday` = '{$birthday}', `avatar` = '$user->avatar' " . "WHERE `id`='{$idToUpdate}'" ); } $_SESSION['user'] = $user; } header("location:index.php"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title></title> </head> <body> <?php if (isset($_SESSION['user'])) { echo '<p><a href="info.php">Скрытый контент</a></p>'; } else if (!isset($_GET['code']) && !isset($_SESSION['user'])) { foreach ($adapters as $title => $adapter) { echo '<p><a href="' . $adapter->getAuthUrl() . '">Аутентификация через ' . ucfirst($title) . '</a></p>'; } } ?> </body> </html>
и есть файл стандартной регистрации пользователя: Спойлер: регистрация Код (Text): <?php if ( !defined('ABS_PATH') ) exit('ABS_PATH is not loaded. Direct access is not allowed.'); Class UserActions { var $is_admin; var $manager; function __construct($is_admin) { $this->is_admin = $is_admin; $this->manager = User::newInstance(); } //add... function add() { $error = array(); $flash_error = ''; if( (osc_recaptcha_private_key() != '') && !$this->is_admin ) { if( !osc_check_recaptcha() ) { $flash_error .= _m('The reCAPTCHA was not entered correctly') . PHP_EOL; $error[] = 4; } } if( Params::getParam('s_password', false, false) == '' ) { $flash_error .= _m('The password cannot be empty') . PHP_EOL; $error[] = 6; } if( Params::getParam('s_password', false, false) != Params::getParam('s_password2', false, false) ) { $flash_error .= _m("Passwords don't match") . PHP_EOL; $error[] = 7; } $input = $this->prepareData(true); if( $input['s_name']=='' ) { $flash_error .= _m('The name cannot be empty') . PHP_EOL; $error[] = 10; } if( !osc_validate_email($input['s_email']) ) { $flash_error .= _m('The email is not valid') . PHP_EOL; $error[] = 5; } $email_taken = $this->manager->findByEmail($input['s_email']); if( $email_taken != false ) { osc_run_hook('register_email_taken', $input['s_email']); $flash_error .= _m('The specified e-mail is already in use') . PHP_EOL; $error[] = 3; } if($input['s_username']!='') { $username_taken = $this->manager->findByUsername($input['s_username']); if( !$error && $username_taken != false ) { $flash_error .= _m("Username is already taken") . PHP_EOL; $error[] = 8; } if(osc_is_username_blacklisted($input['s_username'])) { $flash_error .= _m("The specified username is not valid, it contains some invalid words") . PHP_EOL; $error[] = 9; } } $flash_error = osc_apply_filter('user_add_flash_error', $flash_error); if($flash_error!='') { osc_run_hook('user_register_failed', $error); return $flash_error; } // hook pre add or edit osc_run_hook('pre_user_post'); $this->manager->insert($input); $userId = $this->manager->dao->insertedId(); if($input['s_username']=='') { $this->manager->update( array('s_username' => $userId) ,array('pk_i_id' => $userId) ); } if ( is_array( Params::getParam('s_info') ) ) { foreach (Params::getParam('s_info') as $key => $value) { $this->manager->updateDescription($userId, $key, $value); } } Log::newInstance()->insertLog('user', $this->is_admin ? 'add' : 'register', $userId, $input['s_email'], $this->is_admin ? 'admin' : 'user', $this->is_admin ? osc_logged_admin_id() : $userId); $user = $this->manager->findByPrimaryKey($userId); if( osc_notify_new_user() && !$this->is_admin ) { osc_run_hook('hook_email_admin_new_user', $user); } if( osc_user_validation_enabled() && !$this->is_admin ) { osc_run_hook('hook_email_user_validation', $user, $input); $success = 1; } else { $this->manager->update( array('b_active' => '1') ,array('pk_i_id' => $userId) ); // update items with s_contact_email the same as new user email $items_updated = Item::newInstance()->update(array('fk_i_user_id' => $userId, 's_contact_name' => $input['s_name']), array('s_contact_email' => $input['s_email']) ); if($items_updated!==false && $items_updated>0) { User::newInstance()->update('i_items = i_items + '. (int)$items_updated, array('pk_i_id' => $userId) ); } // update alerts user id with the same email Alerts::newInstance()->update(array('fk_i_user_id' => $userId), array('s_email' => $input['s_email'])); $success = 2; } osc_run_hook('user_register_completed', $userId); return $success; } ......тут еще код не влез ?> вот весь файл: http://rgho.st/8Fyf7Dwws Наверно как то эти файлы нужно объединить?
делал для этого движка через ulogin. у них готового плагина для данной доски нет, но если использовать стандартные файлы для интеграции можно и самому прикрутить. еще момент, в последних версиях оскласс появилась CSRF защита, поэтому лишние трудности. короче сделал костыльным способом, но работает. http://4donation.ru/user/login