За последние 24 часа нас посетили 73767 программистов и 10224 робота. Сейчас ищут 2000 программистов ...

Авторизация на сайте через вк (не получается что нужно)

Тема в разделе "PHP для новичков", создана пользователем root3x, 13 янв 2017.

  1. root3x

    root3x Новичок

    С нами с:
    13 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    Всем привет. В общем движок сайта Osclass (доска объявлений). Хочу сделать быструю регистрацию на сайте через контакт и одноклассники. Нужно чтоб пользователи заносились в базу и имели мини личный кабинет. Или что бы пользователь определялся и мог давать объявления.
    Может кто помочь?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Чем? Готовых плагинов нету для этого скрипта?
     
  3. root3x

    root3x Новичок

    С нами с:
    13 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    готовые платные и там что то не то.
    щас сделал что авторизуется и показывает инфу из вк что авторизован, но нужно чтоб определялся как пользователь и мог добавлять объявления. как это присвоить пользователю

    есть файл авторизации:
    Код (Text):
    1. <?php
    2.  
    3. require_once 'lib/SocialAuther/autoload.php';
    4. require_once 'config.inc.php';
    5.  
    6. $adapterConfigs = array(
    7.     'vk' => array(
    8.         'client_id'     => '5819257',
    9.         'client_secret' => 'Agdsge4wgfdhbvcdf',
    10.         'redirect_uri'  => 'http://omutads.byethost16.com/auth?provider=vk'
    11.     ),
    12.     'odnoklassniki' => array(
    13.         'client_id'     => '',
    14.         'client_secret' => '',
    15.         'redirect_uri'  => 'http://localhost/auth?provider=odnoklassniki',
    16.         'public_key'    => 'CBADCBMKABABABABA'
    17.     )
    18. );
    19.  
    20. $adapters = array();
    21. foreach ($adapterConfigs as $adapter => $settings) {
    22.     $class = 'SocialAuther\Adapter\\' . ucfirst($adapter);
    23.     $adapters[$adapter] = new $class($settings);
    24. }
    25.  
    26. if (isset($_GET['provider']) && array_key_exists($_GET['provider'], $adapters) && !isset($_SESSION['user'])) {
    27.     $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);
    28.  
    29.     if ($auther->authenticate()) {
    30.  
    31.         $result = mysql_query(
    32.             "SELECT *  FROM `users` WHERE `provider` = '{$auther->getProvider()}' AND `social_id` = '{$auther->getSocialId()}' LIMIT 1"
    33.         );
    34.  
    35.         $record = mysql_fetch_array($result);
    36.         if (!$record) {
    37.             $values = array(
    38.                 $auther->getProvider(),
    39.                 $auther->getSocialId(),
    40.                 $auther->getName(),
    41.                 $auther->getEmail(),
    42.                 $auther->getSocialPage(),
    43.                 $auther->getSex(),
    44.                 date('Y-m-d', strtotime($auther->getBirthday())),
    45.                 $auther->getAvatar()
    46.             );
    47.  
    48.             $query = "INSERT INTO `users` (`provider`, `social_id`, `name`, `email`, `social_page`, `sex`, `birthday`, `avatar`) VALUES ('";
    49.             $query .= implode("', '", $values) . "')";
    50.             $result = mysql_query($query);
    51.         } else {
    52.             $userFromDb = new stdClass();
    53.             $userFromDb->provider   = $record['provider'];
    54.             $userFromDb->socialId   = $record['social_id'];
    55.             $userFromDb->name       = $record['name'];
    56.             $userFromDb->email      = $record['email'];
    57.             $userFromDb->socialPage = $record['social_page'];
    58.             $userFromDb->sex        = $record['sex'];
    59.             $userFromDb->birthday   = date('m.d.Y', strtotime($record['birthday']));
    60.             $userFromDb->avatar     = $record['avatar'];
    61.         }
    62.  
    63.         $user = new stdClass();
    64.         $user->provider   = $auther->getProvider();
    65.         $user->socialId   = $auther->getSocialId();
    66.         $user->name       = $auther->getName();
    67.         $user->email      = $auther->getEmail();
    68.         $user->socialPage = $auther->getSocialPage();
    69.         $user->sex        = $auther->getSex();
    70.         $user->birthday   = $auther->getBirthday();
    71.         $user->avatar     = $auther->getAvatar();
    72.  
    73.         if (isset($userFromDb) && $userFromDb != $user) {
    74.             $idToUpdate = $record['id'];
    75.             $birthday = date('Y-m-d', strtotime($user->birthday));
    76.  
    77.             mysql_query(
    78.                 "UPDATE `users` SET " .
    79.                 "`social_id` = '{$user->socialId}', `name` = '{$user->name}', `email` = '{$user->email}', " .
    80.                 "`social_page` = '{$user->socialPage}', `sex` = '{$user->sex}', " .
    81.                 "`birthday` = '{$birthday}', `avatar` = '$user->avatar' " .
    82.                 "WHERE `id`='{$idToUpdate}'"
    83.             );
    84.         }
    85.  
    86.         $_SESSION['user'] = $user;
    87.     }
    88.  
    89.     header("location:index.php");
    90. }
    91. ?>
    92.  
    93. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    94.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    95. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    96. <head>
    97.     <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    98.     <title></title>
    99. </head>
    100. <body>
    101.  
    102. <?php
    103. if (isset($_SESSION['user'])) {
    104.     echo '<p><a href="info.php">Скрытый контент</a></p>';
    105. } else if (!isset($_GET['code']) && !isset($_SESSION['user'])) {
    106.     foreach ($adapters as $title => $adapter) {
    107.         echo '<p><a href="' . $adapter->getAuthUrl() . '">Аутентификация через ' . ucfirst($title) . '</a></p>';
    108.     }
    109. }
    110. ?>
    111.  
    112. </body>
    113. </html>
     
    #3 root3x, 14 янв 2017
    Последнее редактирование: 14 янв 2017
  4. root3x

    root3x Новичок

    С нами с:
    13 янв 2017
    Сообщения:
    3
    Симпатии:
    0
    и есть файл стандартной регистрации пользователя:

    Код (Text):
    1. <?php if ( !defined('ABS_PATH') ) exit('ABS_PATH is not loaded. Direct access is not allowed.');
    2.  
    3.     Class UserActions
    4.     {
    5.         var $is_admin;
    6.         var $manager;
    7.  
    8.         function __construct($is_admin)
    9.         {
    10.             $this->is_admin = $is_admin;
    11.             $this->manager  = User::newInstance();
    12.         }
    13.  
    14.         //add...
    15.         function add()
    16.         {
    17.             $error = array();
    18.             $flash_error = '';
    19.             if( (osc_recaptcha_private_key() != '') && !$this->is_admin ) {
    20.                 if( !osc_check_recaptcha() ) {
    21.                     $flash_error .= _m('The reCAPTCHA was not entered correctly') . PHP_EOL;
    22.                     $error[] = 4;
    23.                 }
    24.             }
    25.  
    26.             if( Params::getParam('s_password', false, false) == '' ) {
    27.                 $flash_error .= _m('The password cannot be empty') . PHP_EOL;
    28.                 $error[] = 6;
    29.             }
    30.  
    31.             if( Params::getParam('s_password', false, false) != Params::getParam('s_password2', false, false) ) {
    32.                 $flash_error .= _m("Passwords don't match") . PHP_EOL;
    33.                 $error[] = 7;
    34.             }
    35.  
    36.             $input = $this->prepareData(true);
    37.  
    38.             if( $input['s_name']=='' ) {
    39.                 $flash_error .= _m('The name cannot be empty') . PHP_EOL;
    40.                 $error[] = 10;
    41.             }
    42.  
    43.             if( !osc_validate_email($input['s_email']) ) {
    44.                 $flash_error .= _m('The email is not valid') . PHP_EOL;
    45.                 $error[] = 5;
    46.             }
    47.  
    48.             $email_taken = $this->manager->findByEmail($input['s_email']);
    49.             if( $email_taken != false ) {
    50.                 osc_run_hook('register_email_taken', $input['s_email']);
    51.                 $flash_error .= _m('The specified e-mail is already in use') . PHP_EOL;
    52.                 $error[] = 3;
    53.             }
    54.  
    55.             if($input['s_username']!='') {
    56.                 $username_taken = $this->manager->findByUsername($input['s_username']);
    57.                 if( !$error && $username_taken != false ) {
    58.                     $flash_error .= _m("Username is already taken") . PHP_EOL;
    59.                     $error[] = 8;
    60.                 }
    61.                 if(osc_is_username_blacklisted($input['s_username'])) {
    62.                     $flash_error .= _m("The specified username is not valid, it contains some invalid words") . PHP_EOL;
    63.                     $error[] = 9;
    64.                 }
    65.             }
    66.  
    67.             $flash_error = osc_apply_filter('user_add_flash_error', $flash_error);
    68.             if($flash_error!='') {
    69.                 osc_run_hook('user_register_failed', $error);
    70.                 return $flash_error;
    71.             }
    72.  
    73.             // hook pre add or edit
    74.             osc_run_hook('pre_user_post');
    75.  
    76.  
    77.             $this->manager->insert($input);
    78.             $userId = $this->manager->dao->insertedId();
    79.  
    80.             if($input['s_username']=='') {
    81.                 $this->manager->update(
    82.                                  array('s_username' => $userId)
    83.                                 ,array('pk_i_id'  => $userId)
    84.                 );
    85.             }
    86.  
    87.             if ( is_array( Params::getParam('s_info') ) ) {
    88.                 foreach (Params::getParam('s_info') as $key => $value) {
    89.                     $this->manager->updateDescription($userId, $key, $value);
    90.                 }
    91.             }
    92.  
    93.             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);
    94.  
    95.             $user = $this->manager->findByPrimaryKey($userId);
    96.             if( osc_notify_new_user() && !$this->is_admin ) {
    97.                 osc_run_hook('hook_email_admin_new_user', $user);
    98.             }
    99.  
    100.             if( osc_user_validation_enabled() && !$this->is_admin ) {
    101.                 osc_run_hook('hook_email_user_validation', $user, $input);
    102.                 $success = 1;
    103.             } else {
    104.                 $this->manager->update(
    105.                                  array('b_active' => '1')
    106.                                 ,array('pk_i_id'  => $userId)
    107.                 );
    108.  
    109.                 // update items with s_contact_email the same as new user email
    110.                 $items_updated = Item::newInstance()->update(array('fk_i_user_id' => $userId, 's_contact_name' => $input['s_name']), array('s_contact_email' => $input['s_email']) );
    111.                 if($items_updated!==false && $items_updated>0) {
    112.                     User::newInstance()->update('i_items = i_items + '. (int)$items_updated, array('pk_i_id' => $userId) );
    113.                 }
    114.                 // update alerts user id with the same email
    115.                 Alerts::newInstance()->update(array('fk_i_user_id' => $userId), array('s_email' => $input['s_email']));
    116.  
    117.                 $success = 2;
    118.             }
    119.  
    120.             osc_run_hook('user_register_completed', $userId);
    121.             return $success;
    122.         }
    123.  
    124.  
    125.             ......тут еще код не влез
    126.  
    127. ?>

    вот весь файл:
    http://rgho.st/8Fyf7Dwws


    Наверно как то эти файлы нужно объединить?
     
    #4 root3x, 14 янв 2017
    Последнее редактирование: 14 янв 2017
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Да, можно, а как, то нужно разбираться, может в документации скрипта что-то есть
     
  6. wisemike

    wisemike Новичок

    С нами с:
    14 янв 2017
    Сообщения:
    1
    Симпатии:
    0
    делал для этого движка через ulogin. у них готового плагина для данной доски нет, но если использовать стандартные файлы для интеграции можно и самому прикрутить. еще момент, в последних версиях оскласс появилась CSRF защита, поэтому лишние трудности. короче сделал костыльным способом, но работает. http://4donation.ru/user/login