Плагин авторизации через Вконтакте, Yandex, Google, Facebook и другие Open ID
Привет, я начинающий программист и решил встроить в свой сайт плагин авторизации Loginza.
Задача данного скрипта очень проста: авторизация через социальные сети и других провайдеров Open ID
Для начала нам понадобятся классы для работы с сервисом, которые можно скачать здесь
— LoginzaAPI.class.php
— LoginzaUserProfile.class.php
— JSON.php
Подключаем наши классы:
require_once 'libs/LoginzaAPI.class.php';
require_once 'libs/LoginzaUserProfile.class.php';
Создаем обьект для работы с Loginza API
$LoginzaAPI = new LoginzaAPI();
в
добавляем —
Код из архива
Далее создадим локального пользователя, но перед этим проверим есть ли уже запись в нашей базе для этого в класс LoginzaUserProfile.class.php добавим следующие строчки
Которые позволят нам получить уникальный id пользоваля в базе провайдера через которого идет авторизация.
теперь проверим по логину пользователя и uid есть ли он в нашей базе.
На всякий случай зашифруем uid по md5();
где:
$LoginzaProfile->genNickname() — Ник на сайте через который проходит авторизация
md5($LoginzaProfile->genUID()) — Зашифрованный id пользователя
$_SESSION['loginza']['profile']->photo — Фотография пользователя
$LoginzaProfile->genEmail() — email указанный в профиле пользователя
$LoginzaProfile->genFullName()) — полное имя
$LoginzaProfile->genDob() — Дата рождения
$LoginzaProfile->genUserSite() — Web Site указанный в профиле пользователя
$LoginzaProfile->genProvider() — адрес провайдера, например vkontakte.ru ( это нам поможет отображать иконку пользователя, например в оставленных комметариях)
}
Архив с рабочим примером можно скачать здесь.
Просмотреть пример здесь.
После установки на сервер, используйте дамп users.sql.
Задача данного скрипта очень проста: авторизация через социальные сети и других провайдеров Open ID
Для начала нам понадобятся классы для работы с сервисом, которые можно скачать здесь
— LoginzaAPI.class.php
— LoginzaUserProfile.class.php
— JSON.php
Подключаем наши классы:
require_once 'libs/LoginzaAPI.class.php';
require_once 'libs/LoginzaUserProfile.class.php';
Создаем обьект для работы с Loginza API
$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
$LoginzaProfile = new LoginzaUserProfile($_SESSION['loginza']['profile']);
Далее создадим локального пользователя, но перед этим проверим есть ли уже запись в нашей базе для этого в класс LoginzaUserProfile.class.php добавим следующие строчки
public function genEmail () { // получит email
return $this->profile->email;
}
public function genProvider () { // получит адрес провайдера, например <a href="http://vkontakte.ru">vkontakte.ru</a>
return $this->profile->provider;
}
public function genIdentity () { // получит адрес пользователя , например <a href="http://vkontakte.ru/login">vkontakte.ru/login</a>
return $this->profile->identity;
}
public function genDob () { // получит дату рождения пользователя
return $this->profile->dob;
}
public function genUID () { // получит уникальный id пользователя
return $this->profile->uid;
}
public function genGender () { // получит пол пользователя
return $this->profile->gender;
}
Которые позволят нам получить уникальный id пользоваля в базе провайдера через которого идет авторизация.
теперь проверим по логину пользователя и uid есть ли он в нашей базе.
На всякий случай зашифруем uid по md5();
$finduser = "SELECT * FROM users WHERE login='".$LoginzaProfile->genNickname()."' AND password='".md5($LoginzaProfile->genUID())."' ";
$respu = mysql_query($finduser);
$r = @mysql_fetch_array($respu);
if($r['id'] == '') { //если id из нашей базы пустое, создаем новую запись
$newuser = mysql_query ("INSERT INTO users (login,password,avatar,email,name,bdate,website,openid) VALUES('".$LoginzaProfile->genNickname()."','".md5($LoginzaProfile->genUID())."','".$_SESSION['loginza']['profile']->photo."','".$LoginzaProfile->genEmail()."','".$LoginzaProfile->genFullName())."','".$LoginzaProfile->genDob()."','".$LoginzaProfile->genUserSite()."','".$LoginzaProfile->genProvider()."')"); }
где:
$LoginzaProfile->genNickname() — Ник на сайте через который проходит авторизация
md5($LoginzaProfile->genUID()) — Зашифрованный id пользователя
$_SESSION['loginza']['profile']->photo — Фотография пользователя
$LoginzaProfile->genEmail() — email указанный в профиле пользователя
$LoginzaProfile->genFullName()) — полное имя
$LoginzaProfile->genDob() — Дата рождения
$LoginzaProfile->genUserSite() — Web Site указанный в профиле пользователя
$LoginzaProfile->genProvider() — адрес провайдера, например vkontakte.ru ( это нам поможет отображать иконку пользователя, например в оставленных комметариях)
}
} elseif (isset($_GET['quit'])) {
// выход пользователя
unset($_SESSION['loginza']);
}
// проверка авторизации, вывод профиля если пользователь авторизован ранее
if (!empty($_SESSION['loginza']['is_auth'])) {
// объект генерации недостаюих полей (если требуется)
$LoginzaProfile = new LoginzaUserProfile($_SESSION['loginza']['profile']);
// пользователь уже прошел авторизацию
$avatar = '';
if (!empty($_SESSION['loginza']['profile']->photo)) {
$avatar = '<img src="http://'.$_SESSION['loginza']['profile']->photo.'"/> ';
}
echo "<h3>Приветствуем Вас:</h3>";
$favicon = '<img src="http://'.$LoginzaProfile->genProvider().'favicon.ico"/>';
echo $avatar . $favicon . $LoginzaProfile->genDisplayName().', Выход ('.$LoginzaProfile->genNickname().')';
$userpassword = $LoginzaProfile->genUID();
// вывод данных полученных через LoginzaUserProfile
echo "";
echo "Ник: ".$LoginzaProfile->genNickname()."
";
echo "Отображать как: ".$LoginzaProfile->genDisplayName()."
";
echo "Полное имя: ".$LoginzaProfile->genFullName()."
";
echo "Сайт: ".$LoginzaProfile->genUserSite()."
";
echo "Email: ".$LoginzaProfile->genEmail()."
";
echo "Провайдер: ".$LoginzaProfile->genProvider()."
";
echo "Профиль: ".$LoginzaProfile->genIdentity()."
";
echo "Дата Рождения: ".$LoginzaProfile->genDob()."
";
echo "Пол: ".$LoginzaProfile->genGender()."
";
echo "Выдуманный пароль равен uid пользователя в MD5: ".md5($userpassword)."
";
echo "";
// выводим переданные данные от Loginza API
$LoginzaAPI->debugPrint($_SESSION['loginza']['profile']);
} else {
// требуется авторизация, вывод ссылки на Loginza виджет
echo "<h3>Блок авторизации:</h3>";
echo 'Для авторизации нажмите ссылку';
// или вывод панели с иконками
echo '
<iframe src="http://loginza.ru/api/widget?overlay=loginza&token_url=[RETURN_URL]"
style="width:359px;height:300px;" scrolling="no" frameborder="no">
';}
Архив с рабочим примером можно скачать здесь.
Просмотреть пример здесь.
После установки на сервер, используйте дамп users.sql.
3 комментария