Общий смысл:
По кнопке социальнй сети, открывается окно с авторизацией выбранной соц. сети.После входа, окно авторизации закрывается, в поля формы родительского окна передаются данные пользователя.
Список социальных сетей, с помощью которых будем авторизоваться:
- yandex
- mail.ru
- facebook.com
- vk.com
Общая информация и структура
config.php - файл с настройками приложения (client id, secret key, callback, path)login.php - файл с кнопкой для авторизации.
redirect.php - определяет страницу перенаправления, если пользователь не авторизован
callback.php -обработка дынных авторизации, получение access_tocken
index.php - выполняется при успешной авторизации.
0. Регистрируем web приложение, и получаем CLIENT_ID, SECRET
1. config.php - прописываем полученные данные
// id приложения
define("FCLIENT_ID", "465465464646");
// защищенный ключ
define("FSECRET", "1231321321313213213213213131313");
// куда перенаправим пользователя после авторизации
define("FOAUTH_CALLBACK", "callback.php");
// настройки доступа
define("FSCOPE", "email,user_about_me,user_birthday,user_hometown,user_location,user_relationship_details,user_relationships");
// путь к папке со скриптами
define("FPATH", "http://domain.ru/auths/fb/");
2. login.php - ссылка, которая открывает новое окно с авторизацией facebook
<?
require_once("config.php"); //подключаем конфиг
$link = 'https://www.facebook.com/dialog/oauth?client_id='.FCLIENT_ID.'&redirect_uri='.FPATH.FOAUTH_CALLBACK.'&scope='.FSCOPE;
?> <a class="href" onClick="window.open('<?=$link?>','mywindow','width=500,height=500')"><img src="images/fb_com.png" height=40 border="0" /></a>
3. redirect.php
<?
require_once("config.php");
//перенаправляем на авторизацию
header('Location: '.FPATH.'login.php');
?>
4. callback.php - Получаем acces_tocken
<?
session_start();
require_once("config.php");
// получили параметр code
if (isset($_GET['code'])) {
function curl_get_contents($url)
{
$ch = curl_init($url);
//curl_setopt($curl, CURLOPT_GET, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$resp = "https://graph.facebook.com/oauth/access_token?client_id=".FCLIENT_ID."&redirect_uri=".FPATH.FOAUTH_CALLBACK."&client_secret=".FSECRET."&code=".$_GET['code'];
$answer = curl_get_contents($resp);
foreach (explode('&', $answer) as $chunk) {
$param[] = explode("=", $chunk);
if ($param) {
$answers['access_token'] = urldecode($param[0][1]);
}
}
if($answers['access_token']){
$_SESSION['access_token'] = $answers['access_token'];
// переадресуем пользователя на нужную страницу
header('Location: '.FPATH.'index.php');
exit();
}
}
?>
5. Получаем необходимые нам данные, возвращаем пользователя из открытого окна авторизации, в родительское окно, и передаем полученные в ходе авторизации данные.
<?session_start();
header('Content-Type: text/html; charset=utf-8');
require_once("config.php");
if(isset($_SESSION['access_token'])) {
function curl_get_contents($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
//Получаем данные пользователя
$resp = "https://graph.facebook.com/me?fields=email,id,name,first_name,last_name,middle_name,location,picture&access_token=".$_SESSION['access_token'];
$data[response] = json_decode(curl_get_contents($resp), true);
$uid = $data[response]["id"];
//Записываем данные в сессию
$_SESSION['user']['firstname'] = $data[response]["last_name"];
$_SESSION['user']['lastname'] = $data[response]["first_name"];
if(isset($data[response]["middle_name"])) { $_SESSION['user']['thirdname'] = $data[response]["middle_name"];} else {$_SESSION['user']['thirdname'] = "";}
if(isset($data[response]["phone"])) {$_SESSION['user']['phone'] = $data[response]["phone"];}
else { $_SESSION['user']['phone'] = ""; }
$_SESSION['user']['email'] = $data[response]["email"];
$_SESSION['user']['about'] = "1";
$_SESSION['user']['userfb'] = $uid;
$_SESSION['uid'] = $uid;
$_SESSION['user']['fotopic'] = $data[response]["picture"]["data"]["url"];
$foto = $data[response]["picture"]["data"]["url"];
?>
<input type="hidden" value="<?=$data[response]["last_name"].":".$data[response]["first_name"].":".$data[response]["phone"].":".$data[response]["email"]?>" id="value">
<script src="scripts/jquery-1.8.3.js"></script>
<script>
//Закрываем текущее окно, и передаем окну родителю информацию о пользователе (заполняем поля формы)
$(document).ready(function(){
if(window.opener) {
var user = $("#value").val().split(":");
var w = window.opener;
w.$('#inputname').val(user[0]+" "+user[1]);
w.$('#inputemail').val(user[3]);
w.$('#inputphone').val(user[2]);
self.close(); }
});
</script>
<?
mysql_close();
}
else {
require_once("redirect.php");
}
?>
Комментариев нет:
Отправить комментарий