Недавно стало популярным пользоваться авторизацией на сайтах, используя социальные сети, в которых учетные записи есть почти у каждого пользователя интернета. В статье будет рассказано о том, как провести авторизацию на сайте используя сервер Loginza.
В первую очередь установим на сайт кнопки авторизации. Чтобы провести эту операцию нам необходимо встроить в нашу страницу код HTML. Если вам, например, нужны полностью все сервисы авторизации, которые производит Loginza, необходимо ввести код:
</script><br /> <a href="https://loginza.ru/api/widget?token_url=http://loginza.test/login.php" class="loginza">Войти через OpenID</a><br />
После чего диалог входа изменится и перейдет к такому образу:
Если нужно ограничить число сервисов, лучше задействовать такой вариант:
</script><br /> <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><br /> <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><br /> <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><br />
После чего диалог будет выглядеть таким образом:
Использование исходного кода происходит проще. Нужно подключить библиотеку Loginza, перенести ссылки на кнопки. Их параметры находятся в token_url, и содержат ссылку, на которую происходит переадресация. После авторизации, появится список в виде параметров, клавишами этих сервисов нужно ограничивать авторизацию.
После чего нам нужно создавать таблицы в базах данных MySQL, в которых находится информация о данном пользователе.
Структуры таблиц баз данных будут выглядеть таким образом:
provider uid является уникальной и не может повторяться ни для одного из пользователей и id – для учета пользователей внутри сайта (SQL файл прилагается в исходниках).
Сейчас я вам покажу, как можно создавать авторизации, используя Loginza.
Исходный код страницы выглядит так index.php:
<?php<br />
session_start();<br />
//кнопки для авторизации<br />
function show_login_form(){<br />
?><br />
<p><strong>Войти как пользователь</strong></p><br />
<script src="http://loginza.ru/js/widget.js" type="text/javascript"></script><br />
<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><br />
<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><br />
<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><br />
<?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 '<div class="'.$icon_class.'"></div>'.$_SESSION['firstname'] . ' ' . $_SESSION['lastname'];<br />
echo '<div><a href="/exit.php">Выйти</a></div>';<br />
}<br />
?><br />
<!DOCTYPE html><br />
<html><br />
<head><br />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br />
<link rel="stylesheet" media="screen" type="text/css" href="style.css" /><br />
<title>Авторизация при помощи Loginza - sanchiz.net</title><br />
</head><br />
<body><br />
<?php<br />
if(!isset($_SESSION['id'])) {<br />
show_login_form();<br />
}<br />
else{<br />
show_menu();<br />
}<br />
?><br />
</body><br />
</html>
Все очень легко, только 2 функции, одна для показания кнопок авторизации:
Следующая — информация для показа, если у пользователя успешно проходит авторизация:
После этого идет часть модуля, которая является самой функциональной для этого файла login.php:
<?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 '<p>'.$error.'</p>';<br />
}<br />
else {<br />
//декодируем данные о пользователе из формата JSON<br />
$user = json_decode($authData);<br />
//var_dump($user);<br />
//если провайдер Вконтакте<br />
if($user->provider == 'http://vkontakte.ru/'){<br />
$uid = $user->uid;<br />
$provider = $user->provider;<br />
$firstname = $user->name->first_name;<br />
$lastname = $user->name->last_name;<br />
$identity = $user->identity;<br />
}<br />
//если провайдер Facebook<br />
elseif($user->provider == 'http://www.facebook.com/'){<br />
$uid = $user->uid;<br />
$provider = $user->provider;<br />
$firstname = $user->name->first_name;<br />
$lastname = $user->name->last_name;<br />
$email = $user->email;<br />
$identity = $user->identity;<br />
}<br />
//Если провайдер Twitter<br />
elseif($user->provider == 'http://twitter.com/'){<br />
$uid = $user->uid;<br />
$provider = $user->provider;<br />
$firstname = $user->name->full_name;<br />
$identity = $user->identity;<br />
}<br />
else{<br />
echo '<p>Неизвестный провайдер.</p>';<br />
}<br />
if($uid && $provider){<br />
$sql = 'SELECT * FROM users WHERE provider = "'.$provider.'" AND uid = "'.$uid.'"';<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 ("'.$uid.'", "'.$provider.'", "'.$identity.'", "'.$firstname.'", "'.$lastname.'", "'.$email.'")';<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 />
?>
Для начала нужно выполнять соединение с базами данных, после чего идет проверка токенa полученного Loginza. Когда токен уже в вас, то нужно отправлять запрос для получения данных пользователя. Если пользователя нет, то мы заносим информацию в базу данных. После этого следует переадресация на нужную нам страницу, где видна ссылка для выхода из учетной записи.
И в последнюю очередь это файл exit.php, используя который вы можете выполнять выход из вашей учетной записи:
<?php<br />
session_start();<br />
session_unset();<br />
session_destroy();<br />
header("Content-type: text/html");<br />
header('Location:/');<br />
?>
Здесь нет ничего сложного, удаляем сессию и переадресовываем пользователя на главную страницу.







