Авторизация через социальные сети

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Julius123 M
Julius123 M
Репутация: 20
Сообщения: 225
Зарегистрирован: 05.02.2017
С нами: 7 лет 1 месяц

Сообщение #1 Julius123 » 21.05.2017, 16:00

Всем привет. Подскажите почему доработка не работает на новой версии 2.0, на 1.2.4 работала прекрасно. Заранее спасибо. Сам не могу разобраться, думаю многим пригодится.

1. В файл шаблона design/ваш шаблон/html/index.tpl перед закрытием тега </head> вставим такой код:

Код: Выделить всё

<!-- Ulogin -->
<script src="http://ulogin.ru/js/ulogin.js"></script>
<div id="uLogin" data-ulogin="display=small;fields=first_name,last_name,email,phone;providers=vkontakte,facebook,odnoklassniki,mailru;hidden=other;redirect_uri=http://ваш-сайт.ru/user/login"></div>
<!-- end -->


2. В фале view/LoginView.php после 64-й строки вставим такой код:

Код: Выделить всё

// Вход через ULogin
elseif(isset($_POST['token']))
{
   $s = file_get_contents('http://ulogin.ru/token.php?token='.$_POST['token'].'&host='.$_SERVER['HTTP_HOST']);
   $simpla = json_decode($s, true);

   if (isset($simpla['identity'])){
      $name = $simpla['first_name'].' '.$simpla['last_name'];
      $email = $simpla['email'];
      $phone = $simpla['phone'];
      $password = md5($simpla['identity'].'Noxter');

      // Проверяем есть ли в БД такой e-mail
      $this->db->query('SELECT count(*) as count, id FROM s_users WHERE email=?', $email);
      $user_exists = $this->db->result();

      if($user_id = $this->users->check_password($email, $password))
      {
         $user = $this->users->get_user($email);
         if($user->enabled)
         {
            $_SESSION['user_id'] = $user_id;
            header('Location: '.$this->config->root_url);
         }
         else
         {
            $this->design->assign('error', 'user_disabled');
         }
      }
      elseif($user_exists->count)
      {
         $_SESSION['user_id'] = $user_exists->id;
         header('Location: '.$this->config->root_url);
      }
      else
      {
         $user_id = $this->users->add_user(array(
            'name'=>$name,
            'email'=>$email,
            'password'=>$password,
            'enabled'=>1)
         );
         $_SESSION['user_id'] = $user_id;
         header('Location: '.$this->config->root_url);
      }
   }
}


Ссылка на автора: http://simpla-addons.org/blog/modules/2xx-avtorizatsiya-cherez-sotsialnye-seti

Julius123 M
Julius123 M
Репутация: 20
Сообщения: 225
Зарегистрирован: 05.02.2017
С нами: 7 лет 1 месяц

Сообщение #2 Julius123 » 23.05.2017, 22:23

Никто не подскажет? :(

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 24.05.2017, 07:42

Причин много.
1. Метод по ссылке предназначен для Simpla
2. Этот метод не работает даже для Simpla
3. Первая вставка совсем неправильная - вставляется div внутрь секции head.
4. Поскольку разработка относится к стандартной Simpla, то при второй вставке для OkayCMS в точности как написано будет полное безобразие.
5. Возможно, и еще что-то неверно...

Julius123 M
Julius123 M
Репутация: 20
Сообщения: 225
Зарегистрирован: 05.02.2017
С нами: 7 лет 1 месяц

Сообщение #4 Julius123 » 19.06.2017, 02:22

korshunov писал(а):Причин много.
1. Метод по ссылке предназначен для Simpla
2. Этот метод не работает даже для Simpla
3. Первая вставка совсем неправильная - вставляется div внутрь секции head.
4. Поскольку разработка относится к стандартной Simpla, то при второй вставке для OkayCMS в точности как написано будет полное безобразие.
5. Возможно, и еще что-то неверно...

Метод полностью работает на симпле и скажу даже больше успешно работает на Okay 1.2.4 и долго у меня стояла эта доработка именно на версии 1.2.4. Уже неделю шуршу этот код, ломаю голову и пытаюсь понять что изменилось в версии 2.0 что модуль перестал работать?! Может сам разработчик Окай подскажет? Я уже перепробовал все :( Точнее работает так что если зарегистрировался через FB например то войти через другие соц сети уже не можешь, только через FB, на 1.2.4 все было в порядке.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #5 korshunov » 19.06.2017, 07:03

У меня на версии 2.0.2 все прекрасно работает. Конечно, если не делать вставки примитивно по данной инструкции, а правильно, с учетом специфики...

Julius123 M
Julius123 M
Репутация: 20
Сообщения: 225
Зарегистрирован: 05.02.2017
С нами: 7 лет 1 месяц

Сообщение #6 Julius123 » 19.06.2017, 15:52

Вот полностью рабочий код, может кому пригодится

1. В шаблон в нужное место вставляем кнопки соц сетей

Код: Выделить всё

<!-- Ulogin -->
<script src="http://ulogin.ru/js/ulogin.js"></script>
<div id="uLogin" data-ulogin="display=small;fields=first_name,last_name,email,phone;providers=vkontakte,facebook,odnoklassniki,mailru;hidden=other;redirect_uri=http://ваш-сайт.ru/user/login"></div>
<!-- end -->


2. В view/LoginView.php перед

Код: Выделить всё

// Вход
elseif($this->request->method('post') && $this->request->post('login')) {


вставляем

Код: Выделить всё

// Вход через ULogin
elseif(isset($_POST['token']))
{
    $s = file_get_contents('https://ulogin.ru/token.php?token='.$_POST['token'].'&host='.$_SERVER['HTTP_HOST']);
    $user = json_decode($s, true);
 
    if (isset($user['identity'])){
        $name = $user['first_name'].' '.$user['last_name'];
        $email = $user['email'];
        $phone = $user['phone'];
      $network = $user['network'];
        $password = md5($user['identity'].'Noxter');
 
        // Проверяем есть ли в БД такой e-mail
        $this->db->query('SELECT count(*) as count, id FROM ok_users WHERE email=?', $email);
        $user_exists = $this->db->result();
 
        if($user_id = $this->users->check_password($email, $password))
        {
            $user = $this->users->get_user($email);
                $_SESSION['user_id'] = $user_id;
            $this->users->update_user($user_id, array('last_ip'=>$_SERVER['REMOTE_ADDR']));
            $this->users->update_user($user_id, array('network'=>$network));
                header('Location: '.$this->config->root_url.'/user');
        }
        elseif($user_exists->count)
        {
            $_SESSION['user_id'] = $user_exists->id;
         $this->users->update_user($user_id, array('last_ip'=>$_SERVER['REMOTE_ADDR']));
         $this->users->update_user($user_id, array('network'=>$network));
            header('Location: '.$this->config->root_url.'/user');
        }
        else
        {
            $user_id = $this->users->add_user(array(
                'name'=>$name,
                'email'=>$email,
                'password'=>$password,
                'phone'=>$phone,
      'last_ip'=>$_SERVER['REMOTE_ADDR'])
            );
            $_SESSION['user_id'] = $user_id;
            header('Location: '.$this->config->root_url.'/user');
        }
    }
}

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #7 korshunov » 19.06.2017, 17:14

1. Если лишний код удалить, совсем хорошо стало бы...
http://forum.simplacms.ru/topic/4383-авторизация-через-социальные-сети/?p=98364

2.
redirect_uri=http://ваш-сайт.ru/user/login
заменить бы на более приличное
redirect_uri={$config->root_url}/user/login

3. И убрать бы 'Noxter'...

4. Строка
$this->users->update_user($user_id, array('network'=>$network));
дает ошибку БД

Vadik
Vadik
Репутация: 1
Сообщения: 42
Зарегистрирован: 15.12.2016
С нами: 7 лет 3 месяца

Сообщение #8 Vadik » 23.06.2017, 08:20

Добрый день.
Так есть ли правильный и рабочий вариант данного дополнения?


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 20 гостей