Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

Прикручиваем loginza к сайту

Сашка_из_Шебекино

  • Заклинатель Атома
  • Пользователь
  • 1803
  • Репутация:87 
  • Предупреждения: 0 
  • Регистрация:
    27 Мар 2011
#1
пока по-быстрому оформлю, потом подробнее распишу. хотя и сам скрипт тоже по-быстрому писал)

прошу извинить, но сделал без всяких меток и выноса шаблона в отдельный файл, очень лень :)

и так, откройте форму входа (/template/шаблон/html/users/loginform.html) и добавьте в нужное место следующий код:

<script src="/js/widget.js" type="text/javascript"></script>
<iframe src="http://loginza.ru/api/widget?overlay=loginza&token_url=http://АДРЕС_САЙТА/users/loginza"
style="width:359px;height:300px;" scrolling="no" frameborder="no"></iframe>


он выводит айфрейм с шириной 359px и вышиной 300px где список сервисов. можно некоторые сервисы добавлять/убирать, читайте доку

потом открываем /modules/users/index.php

перед
Code:
}

?>

добавляем

Code:
public function loginza() {
        // объект работы с Loginza API
        require_once(R . 'sys/inc/libs/LoginzaAPI.class.php');
        require_once(R . 'sys/inc/libs/LoginzaUserProfile.class.php');
        $LoginzaAPI = new LoginzaAPI();
        if (!empty($_POST['token'])) {
            // получаем профиль авторизованного пользователя
            $UserProfile = $LoginzaAPI->getAuthInfo($_POST['token']);
    
            // проверка на ошибки
            if (!empty($UserProfile->error_type)) {
                // есть ошибки, выводим их
                // в рабочем примере данные ошибки не следует выводить пользователю, так как они несут информационный характер только для разработчика
                echo $UserProfile->error_type.": ".$UserProfile->error_message;
            } elseif (empty($UserProfile)) {
                // прочие ошибки
                echo 'Temporary error.';
            } else {
                // ошибок нет запоминаем пользователя как авторизованного
                $_SESSION['loginza']['is_auth'] = 1;
                // запоминаем профиль пользователя в сессию или создаем локальную учетную запись пользователя в БД
                $_SESSION['loginza']['profile'] = $UserProfile;
                $LoginzaProfile = new LoginzaUserProfile($_SESSION['loginza']['profile']);
                $name = $LoginzaProfile->genNickname();
                $password = $name+rand();

                if ($LoginzaProfile->genDob()) {
                    $data = explode("-", $LoginzaProfile->genDob());
                    $byear    = $data[0];
                    $bmonth = $data[1];
                    $bday    = $data[2];
                } else {
                    $byear    = '0000';
                    $bmonth = '00';
                    $bday    = '00';
                }

                // kirilic
                $rus = array( "А","а","В","Е","е","К","М","Н","О","о","Р","р","С","с","Т","Х","х" );
                // latin
                $eng = array( "A","a","B","E","e","K","M","H","O","o","P","p","C","c","T","X","x" );
                $new_name = preg_replace( "#[^- _0-9a-zА-Яа-я]#i", "", $name );
                // Заменяем русские буквы латинскими
                $eng_new_name = str_replace( $rus, $eng, $new_name );
                // Заменяем латинские буквы русскими
                $rus_new_name = str_replace( $eng, $rus, $new_name );
                // Формируем SQL-запрос
                $res = $this->DB->query("SELECT * FROM `" . $this->DB->getFullTableName('users') . "`
                    WHERE name LIKE '".mysql_real_escape_string( $new_name )."' OR
                    name LIKE '".mysql_real_escape_string( $eng_new_name )."' OR
                    name LIKE '".mysql_real_escape_string( $rus_new_name )."';");


                if (count($res) > 0) {

                    $res = $this->DB->query("SELECT *, UNIX_TIMESTAMP(last_visit) as unix_last_visit
                    FROM `" . $this->DB->getFullTableName('users') . "`  WHERE name='"
                    .mysql_real_escape_string( $name )."' AND provider='".$LoginzaProfile->genProvider()."' LIMIT 1");

                    if (count($res) == 0) {
                        echo 'смените ник';
                    } else {
                        
                        $res2 = $this->DB->select('users', DB_FIRST, array('cond' => array('name' => $name)));
                        $user = $res2[0];

                        $_SESSION['user']['name'] = $name;
                        $_SESSION['user']['id'] = $user['id'];
                        $_SESSION['user']['status'] = $user['status'];
                        $_SESSION['user']['passw'] = $user['passw'];

                        $path = '/';
                        setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
                        setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
                        setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
                    }
                } else {



                    // Все поля заполнены правильно - продолжаем регистрацию
                    $res = $this->DB->save('users', array(
                        'name'      => $name,
                        'passw'     => md5( $password ),
                        'email'     => '',
                        'timezone'     => '0',
                        'byear'        => $byear,
                        'bmonth'    => $bmonth,
                        'bday'        => $bday,
                        'about'     => '',
                        'signature' => '',
                        'photo'     => '',
                        'puttime'     => new Expr('NOW()'),
                        'last_visit' => new Expr('NOW()'),
                        'themes'     => 0,
                        'status'     => 1,
                        'activation' => 1,
                        'provider'    => $LoginzaProfile->genProvider()
                    ));
                    $id = mysql_insert_id();

                    $_SESSION['user']['name'] = $name;
                    $_SESSION['user']['id'] = $id;
                    $_SESSION['user']['status'] = '1';
                    $_SESSION['user']['passw'] = md5( $password );
                    
                    echo 'Поздравляем с регистрацией, '.$name.'!<br>ваш пароль '.$password.' запишите его куда-нибудь, он потребуется если вы захотите войти на сайт напрямую, без авторизации на '.$LoginzaProfile->genProvider().' или при смене E-Mail<br><a href="/">Перейти на сайт</a><br><br><br><br><br><br>';

                    $path = '/';
                    setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
                    setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
                    setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
                }
            }
        } elseif (isset($_GET['quit'])) {
            // выход пользователя
            unset($_SESSION['loginza']);
        }

        // проверка авторизации, вывод профиля если пользователь авторизован ранее
        if (!empty($_SESSION['loginza']['is_auth'])) {

            // выводим переданные данные от Loginza API
            $LoginzaAPI->debugPrint($_SESSION['loginza']['profile']);

        } else {
            // требуетс авторизация, вывод ссылки на Loginza виджет
            echo "<h3>Блок авторизации:</h3>";
            echo '<a href="'.$LoginzaAPI->getWidgetUrl().'" class="loginza">Для авторизации нажмите ссылку</a>';
        }
    }

и кидаем файлы из прекреплённого архива положить в sys/inc/libs/
Прикрепленные файлы:
Прикрепление1: Открыть файл 10.293 Kb
Отредактировано автором 26 Июн 2012

Losting

  • Заглянувший
  • Юзер
  • 16
  • Репутация:2 
  • Предупреждения: 0 
  • Регистрация:
    19 Янв 2012
#2
Спасибо прикрутил. ( И это допиши что файлы с Архива в sys/inc/libs/ кидать или путь сменить)

Отредактировано автором 26 Июн 2012

Сашка_из_Шебекино

  • Заклинатель Атома
  • Пользователь
  • 1803
  • Репутация:87 
  • Предупреждения: 0 
  • Регистрация:
    27 Мар 2011
#3
Losting пишет:
И это допиши что файлы с Архива в sys/inc/libs/ кидать или путь сменить)
забыл, дописал

Добавлено2012.11.10 20-41

Сегодня обнаружился страшный баг. Человек может зайти через одноклассники и тогда его ник будет представлять собой Imya.Familiya но это не поддерживается системой. Не знаю, что они не могут, но вот личку ему я не смог написать. Нужно доработать скрипт, чтобы не торопил регистрировать, а предлогал сменить ник

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#4
ой я бы не советовал подобные интеграции на уровне ядра. Вы же не знаете что в том скрипте который вы тянете с чужого сервера. А даже если его хозяева добрые, то откуда гарантия что их завтра не ломанут и не подменят скрипт. А через него можно утянуть любые данные наших юзеров и ваши в том числе. Я планирую сделать именно собственный плагин для реги через контакт:)

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

Сашка_из_Шебекино

  • Заклинатель Атома
  • Пользователь
  • 1803
  • Репутация:87 
  • Предупреждения: 0 
  • Регистрация:
    27 Мар 2011
#5
Drunya пишет:
Вы же не знаете что в том скрипте который вы тянете с чужого сервера. А даже если его хозяева добрые, то откуда гарантия что их завтра не ломанут и не подменят скрипт.
хозяева - яндекс, так что понятно, что с безопасностью всё нормально.

Drunya пишет:
через контакт [smile]
закопать.

Добавлено2013.01.17 14-58

Drunya пишет:
ой я бы не советовал подобные интеграции на уровне ядра.
пусть будет не в движке, а плагином

Отредактировано автором 17 Янв 2013

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#6
Надо будет подумать как это именно плагином сделать. у меня есть идеи. Дома "поиграюсь". Но пока занят доработкой админки и адаптивным дизайном нашего сайта.

Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)

Sproot

  • Истенный Атомовод
  • Админ
  • 323
  • Репутация:12 
  • Предупреждения: 0 
  • Регистрация:
    9 Апр 2012
#7
а как сделать чтоб пользователь имел нормальное имя а не адрес своей страницы в соцсети ?

Отредактировано автором 20 Фев 2014

Сашка_из_Шебекино

  • Заклинатель Атома
  • Пользователь
  • 1803
  • Репутация:87 
  • Предупреждения: 0 
  • Регистрация:
    27 Мар 2011
#8
Sproot, ну эта тема уже не совсем актуальна, мы теперь перешли на ulogin с loginza. Окно с выбором ника появляется только если текущий занят или не соответствует требованиям, но можно и вручную изменить, покопавшись в базе и добавив запись в таблицу users_ulogin. Пожалуй, нужно переделать, чтобы смена ника была проще.

Sproot

  • Истенный Атомовод
  • Админ
  • 323
  • Репутация:12 
  • Предупреждения: 0 
  • Регистрация:
    9 Апр 2012
#9
Сашка_из_Шебекино пишет:
мы теперь перешли на ulogin с loginza
собственно я её и имел ввиду просто думал что это одно и тоже
видимо нужно пользователям разрешить менять имя 
как бы это сделать чтоб можно было сменить только раз

boriska

  • Атом-мозг
  • Пользователь
  • 846
  • Репутация:65 
  • Предупреждения: 0 
  • Регистрация:
    29 Янв 2013
#10
Drunya 2013-04-11 пишет:
Надо будет подумать как это именно плагином сделать. у меня есть идеи. Дома "поиграюсь". Но пока занят доработкой админки и адаптивным дизайном нашего сайта.
Интересно посмотреть на него. Ему уже почти год оО.

Отредактировано автором 21 Фев 2014
Соразработчик Atom-M CMS
1
Сейчас online: 43. Зарегистрированных: 2. Гостей: 41.