[  Зарегистрироваться  ]  Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны Проекты Забыли пароль?

Вернуться   OpenTrade Commerce Forum > Совместное развитие > Каталог дополнений

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.01.2013, 10:43  Ссылка на сообщение   #1  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Lightbulb LOGINZA - модуль авторизации через соц. сети

Как думаете стоить реализовать данный функционал?

http://loginza.ru/

Loginza - это интерактивный JavaScript виджет, предоставляющий посетителям Ваших сайтов широкий список вариантов аутентификации через учетные записи распространенных WEB-порталов и сервисов (Яндекс, Google и тп., см. полный список).

Простое в освоении Loginza.API и наличие уже готовых решений на языках PHP и ASP позволяют без особого труда и навыков, предоставить пользователям Вашего сайта возможность аутентификации через Яндекс, Google, Rambler, OpenID и других провайдеров авторизации.

Хочу сделать для ОТ. Как думаете нужно или нет?
Старый 24.01.2013, 10:54  Ссылка на сообщение   #2  
GPetrov is offline
GPetrov
Участник
Аватар для GPetrov
 
54 / 32 (2) +++
Регистрация: 22.01.2013
Думаю да, очень удобно
Старый 24.01.2013, 11:40  Ссылка на сообщение   #3  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Буду пытаться сделать теперь.
Старый 25.01.2013, 12:50  Ссылка на сообщение   #4  
TaoJet is offline
TaoJet
сайты для посредников
Аватар для TaoJet
 
95 / 176 (6) ++++++
Регистрация: 14.01.2013
Ох, не стоит...

У нас был опыт с Логинзой - год назад отказались от неё.
Как её Яндекс купил, так и развиваться перестала, к сожалению.

Много ошибок было.
Старый 25.01.2013, 14:07  Ссылка на сообщение   #5  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Печально.
Старый 12.02.2013, 09:21  Ссылка на сообщение   #6  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Я нашел решение как подключить логинзу. Как думаете стоит или нет терять на это время?
Старый 19.02.2013, 22:46  Ссылка на сообщение   #7  
RomanKoshelev is offline
RomanKoshelev
Живу я здесь
Аватар для RomanKoshelev
 
1,419 / 466 (18) +++++++
Регистрация: 28.12.2012
Адрес: Moscow
К ответу!
__________________
Роман Кошелев, организатор проекта opentao.net
Старый 20.02.2013, 11:53  Ссылка на сообщение   #8  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Подключаем логинзу

Суть в следующем.

Первое что нам нужно установить кнопки авторизации на сайт. Для этого необходимо встроить в нашу страницу небольшой HTML код. Например, если нужны абсолютно все сервисы авторизации, которые предоставляет Loginza, достаточно кода:

PHP код:
<script src="http://loginza.ru/js/widget.js" type="text/javascript"></script>
<a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php" class="loginza">Войти через OpenID</a> 
Тогда диалог входа будет выглядеть следующим образом:



Если необходимо ограничить число сервисов для выбора, в примере будет использоваться именно этот вариант, то необходимо вставить код:

PHP код:
<script src="http://loginza.ru/js/widget.js" type="text/javascript"></script>
<a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=vkontakte&providers_set=vkontakte,facebook,twitter" class="loginza vkontakte_button"> </a>
<a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=facebook&providers_set=vkontakte,facebook,twitter" class="loginza facebook_button"> </a>
<a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=twitter&providers_set=vkontakte,facebook,twitter" class="loginza twitter_button"> </a> 
Тогда диалог примет такой вид:



В исходном коде все очень просто, подключаем библиотеку Loginza, вставляем ссылки на кнопки, параметр которых в token_url содержит ссылку, на которую будет производиться переадресация после авторизации, а также список в виде параметров, кнопками каких сервисов необходимо ограничить авторизацию.

Затем нам необходимо создать таблицу в базе данных MySQL, в которой будет храниться информация о пользователе.

Структура таблицы базы данных будет выглядеть следующим образом:



С такой структурой у нас получается уникальная связка provider+uid которая не может повториться ни у одного пользователя и id – для учета пользователей внутри сайта (SQL файл прилагается в исходниках).

Теперь я бы хотел продемонстрировать наглядно, на примере, как можно организовать авторизацию с помощью Loginza.

Вот как выглядит исходный код главной страницы index:

PHP код:
<?php
session_start
();
//кнопки для авторизации
function show_login_form(){
    
?>
    <p><strong>Войти как пользователь</strong></p>
    <script src="http://loginza.ru/js/widget.js" type="text/javascript"></script>
    <a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=vkontakte&providers_set=vkontakte,facebook,twitter" class="loginza vkontakte_button"> </a>
    <a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=facebook&providers_set=vkontakte,facebook,twitter" class="loginza facebook_button"> </a>
    <a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&provider=twitter&providers_set=vkontakte,facebook,twitter" class="loginza twitter_button"> </a>
    <?php
}
//отображение имени и кнопки для выхода
function show_menu(){
    if(
$_SESSION['provider'] == 'http://vkontakte.ru/'){
        
$icon_class 'vk_icon social_small_icon';
    }
    elseif(
$_SESSION['provider'] == 'http://www.facebook.com/'){
        
$icon_class 'facebook_icon social_small_icon';
    }
    elseif(
$_SESSION['provider'] == 'http://twitter.com/'){
        
$icon_class 'twitter_icon social_small_icon';
    }
    echo 
'<div class="'.$icon_class.'"></div>'.$_SESSION['firstname'] . ' ' $_SESSION['lastname'];
    echo 
'<div><a href="taobao.ot.com/exit.php">Выйти</a></div>';
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" media="screen" type="text/css" href="http://taobao.ot.com/css/style.css" />
        <title>Авторизация при помощи Loginza</title>
    </head>
    <body>
        <?php
        
if(!isset($_SESSION['id'])) {
            
show_login_form();
        }
        else{
            
show_menu();
        }
        
?>
    </body>
</html>
Тут все просто, 2 функции, одна для показа кнопок для авторизации:



вторая для показа информации, если пользователь успешно прошел авторизацию:



Следующая часть модуля, она же самая функциональная это файл login.php:

PHP код:
<?php
//подключение к базе данных
$db mysql_pconnect('localhost''admin''111111'128);
mysql_select_db('loginza_test');
//проверка получения токена
if (!isset($_POST['token'])) {
    
$error 'Ошибка получения токена.';
}
//отправляем запрос на получение данных пользователя
elseif (false === ($authData file_get_contents('http://loginza.ru/api/authinfo?token='.$_POST['token']))) {
    
$error 'Ошибка получения данных.';
}
//если произошла ошибка
if (isset($error)) {
    echo 
'<p>'.$error.'</p>';
}
else {
    
//декодируем данные о пользователе из формата JSON
    
$user json_decode($authData);
    
//var_dump($user);
    //если провайдер Вконтакте
    
if($user->provider == 'http://vkontakte.ru/'){
        
$uid $user->uid;
        
$provider $user->provider;
        
$firstname $user->name->first_name;
        
$lastname $user->name->last_name;
        
$identity $user->identity;
    }
    
//если провайдер Facebook
    
elseif($user->provider == 'http://www.facebook.com/'){
        
$uid $user->uid;
        
$provider $user->provider;
        
$firstname $user->name->first_name;
        
$lastname $user->name->last_name;
        
$email $user->email;
        
$identity $user->identity;
    }
    
//Если провайдер Twitter
    
elseif($user->provider == 'http://twitter.com/'){
        
$uid $user->uid;
        
$provider $user->provider;
        
$firstname $user->name->full_name;
        
$identity $user->identity;
    }
    else{
        echo 
'<p>Неизвестный провайдер.</p>';
    }
    if(
$uid && $provider){
        
$sql 'SELECT * FROM users WHERE provider = "'.$provider.'" AND uid = "'.$uid.'"';
        
$result mysql_query($sql);
        
session_start();
        
//если такого пользователя нету в базе данных заносим информацию в базу
        
if((mysql_num_rows($result)) == 0){
            
$sql 'INSERT INTO users (uid, provider, identity, firstname, lastname, email) VALUES ("'.$uid.'", "'.$provider.'", "'.$identity.'", "'.$firstname.'", "'.$lastname.'", "'.$email.'")';
            
mysql_query($sql);
            
$user_id mysql_insert_id();
            
$_SESSION['id'] = $user_id;
            
$_SESSION['provider'] = $provider;
            
$_SESSION['uid'] = $uid;
            
$_SESSION['firstname'] = $firstname;
            
$_SESSION['lastname'] = $lastname;
        }
        
//если пользователь уже существует то присваиваем ему информацию из базы
        
else{
            
$user_row mysql_fetch_assoc($result);
            
session_start();
            
$_SESSION['id'] = $user_row['id'];
            
$_SESSION['provider'] = $user_row['provider'];
            
$_SESSION['uid'] = $user_row['uid'];
            
$_SESSION['firstname'] = $user_row['firstname'];
            
$_SESSION['lastname'] = $user_row['lastname'];
        }
        
//редирект на главную страницу
        
Header('Location: /');
    }
}
?>
В нем сначала выполняется соединение с базы данных, далее проверка токенa отданного Loginza. Если токен получен, то отправляем запрос на получение данных пользователя. Когда данные получены, мы декодируем их из JSON формата функцией json_decode. Конструкция которая выполняет присвоения данных в зависимости от провайдера смотрится довольно громоздко, но тут уж ничего не поделаешь, все сервисы по-разному отдают информацию, поэтому приходится учитывать каждый случай. Следующее что мы делаем это запрос к базе данных, который выбирает пользователя с uid и provider полученного от Loginza. Если такой пользователь уже существует то мы просто присваиваем переменной сессии данные из базы. Если такого пользователя не существует, то мы заносим полученную информацию в базу данных и после чего следует переадресация на нужную нам страницу, где мы уже увидим ссылку на выход из учетной записи и иконку социальной сети с именем, полученным от сервиса.

Ну и последнее это файл exit.php, с помощью которого можно выполнить выход из учетной записи:

PHP код:
<?php
session_start
();
session_unset();
session_destroy();
header("Content-type: text/html");
header('Location:/');
?>
Тут все очень просто, уничтожаем сессию и переадресовываем пользователя на главную страницу.

Вот так легко можно реализовать авторизацию при помощи социальных сетей. Возможно, некоторые моменты реализации упустили, но это лишь доказывает всю мощь свободной авторизации при помощи oAuth.

Здесь небыли рассмотрены мелкие нюансы и методы построения модуля, а также средства безопасности и защиты, но это дает нам почву для размышлений. В любом случае я буду рад услышать вопросы и замечания и обсудить данную статью!
За это сообщение автора поблагодарили: RomanKoshelev (1), XD.shop (1).
Старый 05.03.2013, 16:12  Ссылка на сообщение   #9  
RomanKoshelev is offline
RomanKoshelev
Живу я здесь
Аватар для RomanKoshelev
 
1,419 / 466 (18) +++++++
Регистрация: 28.12.2012
Адрес: Moscow
Ответ получен
Это спецпост, чтобы убрать эту тему из блока "k отвeтy"
__________________
Роман Кошелев, организатор проекта opentao.net
Старый 18.04.2013, 19:49  Ссылка на сообщение   #10  
tao-hot is offline
tao-hot
Участник
Аватар для tao-hot
 
249 / 115 (4) +++++
Регистрация: 22.01.2013
Кто-то уже реализовал авторизацию через соц.сети?
__________________
представитель ОТ, Украина
Старый 19.04.2013, 22:44  Ссылка на сообщение   #11  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Цитата:
Сообщение от tao-hot Посмотреть сообщение
Кто-то уже реализовал авторизацию через соц.сети?
Я забросил прислушался к совету таоджета
 
Теги
loginza, бесплатно, доработка от

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль "Вы экономите" Данияр Каталог дополнений 41 03.07.2013 07:15
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Рейтинг@Mail.ru
Часовой пояс GMT +4, время: 08:30.
Powered by vBulletin® v3.8.5.