Loginza – модуль авторизации на PHP

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

Исходный код

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

&lt;/script&gt;<br />
&lt;a href=&quot;https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&quot; class=&quot;loginza&quot;&gt;Войти через OpenID&lt;/a&gt;<br />

После чего диалог входа изменится и перейдет к такому образу:

Если нужно ограничить число сервисов, лучше задействовать такой вариант:

&lt;/script&gt;<br />
&lt;a href=&quot;https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&amp;provider=vkontakte&amp;providers_set=vkontakte,facebook,twitter&quot; class=&quot;loginza vkontakte_button&quot;&gt; &lt;/a&gt;<br />
&lt;a href=&quot;https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&amp;provider=facebook&amp;providers_set=vkontakte,facebook,twitter&quot; class=&quot;loginza facebook_button&quot;&gt; &lt;/a&gt;<br />
&lt;a href=&quot;https://loginza.ru/api/widget?token_url=http://loginza.test/login.php&amp;provider=twitter&amp;providers_set=vkontakte,facebook,twitter&quot; class=&quot;loginza twitter_button&quot;&gt; &lt;/a&gt;<br />

После чего диалог будет выглядеть таким образом:

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

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

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

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

Сейчас я вам покажу,  как можно создавать авторизации, используя Loginza.

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

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

Все очень легко, только   2 функции, одна для показания кнопок  авторизации:

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

После этого идет  часть модуля, которая   является самой функциональной  для этого файла login.php:

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

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

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

&lt;?php<br />
session_start();<br />
session_unset();<br />
session_destroy();<br />
header(&quot;Content-type: text/html&quot;);<br />
header('Location:/');<br />
?&gt;

Здесь нет ничего сложного, удаляем  сессию и переадресовываем пользователя на главную страницу.

Категория: PHP, Новости Теги: ,

Популярные записи:

Отображение содержимого последнего сообщения Отображение содержимого последнего сообщения
Правильный адрес URL в закладках Правильный адрес URL в закладках
Функции PHP взаимодействующие с Twitter Функции PHP взаимодействующие с Twitter
Создание регистрации на сайте на PHP + MySQL. Часть 2 Создание регистрации на сайте на PHP + MySQL. Часть 2

Оставить комментарий или два

Отправить коментарий

Test

Яндекс.Метрика