Аутентификация через Facebook

Привет всем! Сегодня мы выходим на финишную прямую и рассмотрим, как осуществить процесс аутентификации через социальную сеть Facebook.

sourse

Если кто пропустил предыдущие части, то их можно найти тут:

sourse

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

Шаг 1. Регистрация нового приложения

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

В верхнем правом углу нажимаем на кнопку "+ Создать новое приложение". Далее вписываем название приложения:

Затем вводим проверочный код:

Далее, на странице настроек вашего приложения, отправляемся к блоку "Как ваше приложение встроено в Facebook" и кликаем на пункт "Website with Facebook Login". В открвшемся поле вводим адрес нашего сайта. В моём случае, это http://localhost/facebook-auth:

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

Запишем их в специальные переменные файла index.php:

<?php
$client_id = '578516362116657'; // Client ID
$client_secret = 'eb1814bd3980ab9a306dc35073021fb3'; // Client secret
$redirect_uri = 'http://localhost/facebook-auth'; // Redirect URIs
  

Шаг 2. Генерация ссылки для аутентификации

Для генерации ссылки нам потребуется адрес аутентификации и специальные параметры:

$url = 'https://www.facebook.com/dialog/oauth';

$params = array(
    'client_id'     => $client_id,
    'redirect_uri'  => $redirect_uri,
    'response_type' => 'code',
    'scope'         => 'email,user_birthday'
);

С помощью функции http_build_query, передав туда массив параметров, получим чередование ключей и значений, как в url адресе. Итак, генерируем ссылку и выводим на экран:

echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через Facebook</a></p>';
// https://www.facebook.com/dialog/oauth?client_id=578516362116657&redirect_uri=http://localhost/facebook-auth&response_type=code&scope=email,user_birthday

Итак, ссылка для аутентификации готова. Если мы сформировали все параметры правильным образом и получили верный url, то пройдя по ссылке, будем перенаправлены по адресу, указанному в настройках приложения ('http://localhost/facebook-auth'). Только теперь к этому адресу будет прикреплён специальный параметр code:

// Пример. В вашем случае код будет другой
http://localhost/facebook-auth/?code=AQD5q80zafjvVZoZex87ROxkCvWT9rZhjwZtkBLajYwH20KztPOI0jpb5lHZisPd3mA49Wu_onAeEioU5K6KVuoCliznf61B5bDfZSLFaIn6E7E49zqs4fO6NjTYyxN43LBttCvsSlirJOAtbOpB3oyMrl3bbjlPhGHsCyJzA-DypEIZ1c_36WAEBPmfSq3TroekvTLme3jIzZk0C-93cu8z#_=_

Шаг 3. Получение токена

Начинать процедуру аутентификации мы можем в том случае, если к нам пришёл параметр code. Он нам нужен для того, чтобы получить специальный токен доступа, с помощью которого, в дальнейшем, мы достанем информацию о пользователе.

В первую очередь, снова сформируем параметры для этого запроса. Нам потребуется передать параметры: `client_id` - id приложения; `redirect_uri` - страница, на которую будет возвращён пользователь; `client_secret` - секретный ключ; `code` - url параметр, пришедший от Facebook:

if (isset($_GET['code'])) {
    $result = false;

    $params = array(
        'client_id'     => $client_id,
        'redirect_uri'  => $redirect_uri,
        'client_secret' => $client_secret,
        'code'          => $_GET['code']
    );

    $url = 'https://graph.facebook.com/oauth/access_token';
}

Далее нам нужно отправить GET запрос на адрес https://graph.facebook.com/oauth/access_token, передав перечисленные параметры. В PHP выполнить GET запрос по какому-то адресу можно несколькими способами. Для данного урока я воспользуюсь функцией file_get_contents. В отличии от других социальных сетей, Facebook присылает ответ не в JSON формате, а в виде строки, где параметры разделены специальными символами. Для того чтобы распарсить данный ответ, воспользуемся функцией parse_str, а результат (в виде массива) запишем в переменную $tokenInfo:

$tokenInfo = null;
parse_str(file_get_contents($url . '?' . http_build_query($params)), $tokenInfo);

В результате, при успешном выполнении запроса в переменную $tokenInfo будет записан ответ от Facebook в JSON формате. Данная строка содержит 4 параметра: access_token, который мы будем использовать в следующих запросах для извлечения информации о пользователе; token_type - тип токена; expires_in - время жизни токена; id_token - id токена:

array(2) {
  ["access_token"]=>
  string(115) "AAAIOREZCDAnUBAOEmLbNqgHzQSNFoZBBdZC99eNv6DkZA842GUTHP3H7j7YnxEPOZCmZBiPgEZCJCb80zVXDGP9JeX8DGSRi6PU2liZAPQuj9QZDZD"
  ["expires"]=>
  string(7) "5177324"
}

Шаг 4. Получение информации о пользователе

Далее делаем запрос к Facebook API для получения информации о пользователе. Передавать будем один единственный параметр access_token:

if (count($tokenInfo) > 0 && isset($tokenInfo['access_token'])) {
        $params = array('access_token' => $tokenInfo['access_token']);

        $userInfo = json_decode(file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params))), true);
        if (isset($userInfo['id'])) {
            $userInfo = $userInfo;
            $result = true;
        }
    }

Отправляем GET запрос по адресу https://graph.facebook.com/me.

В результате, если всё было сделано правильно, то получим JSON ответ примерно следующего вида:

Array
(
    [id] => 100000317390816
    [name] => Стас Протасевич
    [first_name] => Стас
    [last_name] => Протасевич
    [birthday] => 07/03/1988
    [hometown] => Array
        (
            [id] => 110228142339670
            [name] => Chisinau, Moldova
        )

    [location] => Array
        (
            [id] => 110228142339670
            [name] => Chisinau, Moldova
        )

    [work] => Array
        (
            [0] => Array
                (
                    [employer] => Array
                        (
                            [id] => 159295210819421
                            [name] => Web-Concept
                        )

                    [location] => Array
                        (
                            [id] => 110228142339670
                            [name] => Chisinau, Moldova
                        )

                    [position] => Array
                        (
                            [id] => 108480125843293
                            [name] => Web Developer
                        )

                    [start_date] => 2010-09
                    [end_date] => 2011-10
                )

        )

    [sports] => Array
        (
            [0] => Array
                (
                    [id] => 106011416097502
                    [name] => Ice hockey
                )

        )

    [favorite_athletes] => Array
        (
            [0] => Array
                (
                    [id] => 202766356426583
                    [name] => Michael Jordan
                )

        )

    [inspirational_people] => Array
        (
            [0] => Array
                (
                    [id] => 7170054127
                    [name] => Hans Zimmer
                )

            [1] => Array
                (
                    [id] => 113529011990795
                    [name] => Steve Jobs
                )

            [2] => Array
                (
                    [id] => 225471537469600
                    [name] => Albert Einstein
                )
        )

    [education] => Array
        (
            [0] => Array
                (
                    [school] => Array
                        (
                            [id] => 135979339750670
                            [name] => Лицей Василия Лупу
                        )

                    [year] => Array
                        (
                            [id] => 140617569303679
                            [name] => 2007
                        )

                    [type] => High School
                )

            [1] => Array
                (
                    [school] => Array
                        (
                            [id] => 110260779004118
                            [name] => State University of Moldova
                        )

                    [year] => Array
                        (
                            [id] => 142963519060927
                            [name] => 2010
                        )

                    [concentration] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 189014467787633
                                    [name] => Прикладная информатика
                                )

                        )

                    [type] => College
                )

            [2] => Array
                (
                    [school] => Array
                        (
                            [id] => 110260779004118
                            [name] => State University of Moldova
                        )

                    [degree] => Array
                        (
                            [id] => 200940416612694
                            [name] => Магистр
                        )

                    [year] => Array
                        (
                            [id] => 115222815248992
                            [name] => 2012
                        )

                    [concentration] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 120214931322280
                                    [name] => сетевые технологии
                                )

                        )

                    [type] => Graduate School
                )

        )

    [gender] => male
    [email] => stanislav.protasevich@gmail.com
    [timezone] => 2
    [locale] => ru_RU
    [languages] => Array
        (
            [0] => Array
                (
                    [id] => 176015189120060
                    [name] => Russian
                )

            [1] => Array
                (
                    [id] => 106059522759137
                    [name] => English
                )

        )

    [verified] => 1
    [updated_time] => 2012-12-06T18:06:38+0000
)

Полный код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title>Аутентификация через Facebook</title>
</head>
<body>

<?php

$client_id = '578516362116657'; // Client ID
$client_secret = 'eb1814bd3980ab9a306dc35073021fb3'; // Client secret
$redirect_uri = 'http://localhost/facebook-auth'; // Redirect URIs

$url = 'https://www.facebook.com/dialog/oauth';

$params = array(
    'client_id'     => $client_id,
    'redirect_uri'  => $redirect_uri,
    'response_type' => 'code',
    'scope'         => 'email,user_birthday'
);

echo $link = '<p><a href="' . $url . '?' . urldecode(http_build_query($params)) . '">Аутентификация через Facebook</a></p>';

if (isset($_GET['code'])) {
    $result = false;

    $params = array(
        'client_id'     => $client_id,
        'redirect_uri'  => $redirect_uri,
        'client_secret' => $client_secret,
        'code'          => $_GET['code']
    );

    $url = 'https://graph.facebook.com/oauth/access_token';

    $tokenInfo = null;
    parse_str(file_get_contents($url . '?' . http_build_query($params)), $tokenInfo);

    if (count($tokenInfo) > 0 && isset($tokenInfo['access_token'])) {
        $params = array('access_token' => $tokenInfo['access_token']);

        $userInfo = json_decode(file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params))), true);

        if (isset($userInfo['id'])) {
            $userInfo = $userInfo;
            $result = true;
        }
    }
}
?>

</body>
</html>

Шаг 5. Извлечение информации о пользователе

Для просмотра большего количества полей загляните в содержание переменной $userInfo:

if ($result) {
        echo "Социальный ID пользователя: " . $userInfo['id'] . '<br />';
        echo "Имя пользователя: " . $userInfo['name'] . '<br />';
        echo "Email: " . $userInfo['email'] . '<br />';
        echo "Ссылка на профиль пользователя: " . $userInfo['link'] . '<br />';
        echo "Пол пользователя: " . $userInfo['gender'] . '<br />';
        echo "ДР: " . $userInfo['birthday'] . '<br />';
        echo '<img src="http://graph.facebook.com/' . $userInfo['id'] . '/picture?type=large" />'; echo "<br />";
    }

Шаг 6. И снова дело за вами

Тут всё как и в предыдущих случаях. Если у нас есть такая информация, как ID пользователя, в первую очередь, нам необходимо проверить его наличие в нашей базе данных. Если пользователя с таким ID не существует, то значит он авторизовался с нашего сайта впервые, и мы внесём его в базу. Если пользователь уже есть, можем проверить, не изменились ли какие-то данные о нём, например, имя или ещё что-то. Если да, обновим запись.

После этого всё что нам осталось сделать, так это создать сессию и поместить в неё информацию о нашем пользователе.

$_SESSION['user'] = $userInfo;

На странице выхода из системы просто удаляем сессию с помощью функции unset.

Итог

Итак, это последняя статья, где мы рассматривали создание аутентификации для отдельной социальной сети или сервиса. В следующем уроке я покажу вам, как построить систему аутентификации через несколько соц сетей, и как прикрутить всё это к БД. Удачи!

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Станислав Протасевич
Урок создан: 22 Марта 2013
Просмотров: 137516
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 22 Марта 2013 14:36
    Adravil
    Спасибо за урок!
  • 22 Марта 2013 14:55
    glebroman
    Огромное спасибо!
  • 22 Марта 2013 19:52
    Alexey Alexey
    Спасибо!
  • 22 Марта 2013 21:49
    Станислав Бабич
    Спасибо большое за весь цикл статей! Теперь не придется перелопачивать горы говна в поисковике в поисках описания авторизации через каждую соц.сеть отдельно. И спасибо что весь код в одном стиле
  • 23 Марта 2013 00:13
    serjikz
    Отличные статьи. А можно как-то узнать еще с помощью тех же API интерфейсов, был ли материал с сайта "залайкан" скажем так? Я что-то по многим сайтам копался, но мало что нашел по этому поводу, да и в ВК почти ничего не сказано. Можно было бы такой цикл статей сделать тоже (был ли лайк от G+, twitter, вк и facebook).
  • 24 Марта 2013 12:33
    dex
    Ссылка не показывает изображение пользователя echo '<img src="http://graph.facebook.com/' . $userInfo['username'] . '/picture?type=large" />'; echo "<br />";
  • 24 Марта 2013 12:37
    dex
    <img src="http://graph.facebook.com/' . $userInfo['username'] . '/picture?type=large" /> Вместо username надо поставить id
  • 26 Марта 2013 18:44
    JonnyD
    Блин, я столько раз был на этом сайте и только сейчас увидел внизу страницы (справа) смайлик который ведет к прикольной картинке! Евгений - БРАВО!!!
  • 26 Марта 2013 19:09
    SkyMan1
    Большое спасибо! То что надо :)
  • 24 Апреля 2013 20:05
    igontarev
    не получается count($tokenInfo) возвращает 0, не пойму в чем дело
    • 24 Апреля 2013 21:21
      stas.protasevich
      может данные конфигурации токена где-то неверны.. сложно так сказать. нужно видеть всю картину
  • 8 Мая 2013 15:14
    lytvynov91
    Спасибо, отличный урок. Очень бы хотелось увидеть аутентефикацию на твиттере, делал все по аналогии, но ничего не получилось.
  • 11 Июня 2013 13:40
    Андрей Лопушанский
    Вот такая ошибка вылазит что это может быть? Message: file_get_contents(https://graph.facebook.com/oauth/access_token?client_id=601069856578037&redirect_uri=http%3A%2F%2Fexportgrain.org%2Fauth%2Ffacebook%2F&client_secret=42986c345d77c204a1f029cc36252fbd&code=AQDEe18ky4cPS9JkV-Il5GDEWyGDE4gCWGxTbnzJ5cph0poy-5NIi1TVag0ux4mtoVgYoXdme6WBJqt-lnJTAOIXY0upokIWyNh_HHHT1jGWYxmZ9qgdiUBK5O0BLJhDw1FHmFRePBbn7qJrgGTNjbOGSUZGVa9A6oJCM9fjYQtPXcyXQaJHePggIaLNkA-dURrj-5fJY1tFMR8HUOUHx31tQy31o4l_SB36wMA4h37eIQe3AJdgCpRtuZ7h1wTJ2Amv1Gh85Q-neOVjzdnb7XWj1nAB00dr8bNI-rdyQ4Z6fs5X3DQTGjr-pB2Xk6bv_uM) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
  • 16 Июня 2013 21:47
    killwindows.berezans
    Отвечаю на пред идущее сообщение. Если запрашиваемая страница вернет статус ответа не равным 200, вы получите такую вот ошибку. Если перейдете по той ссылке которую пихаете в file_get_contents, то увидите что вам отдается ответ в виде json и статус ответа 400, скорее всего вы пытаетесь использовать повторно "code". Для того чтобы можно было отслеживать ошибки и принимать необходимые меры, пользуйтесь CURL.
  • 16 Июня 2013 22:33
    killwindows.berezans
    И еще. Может я что то не так делаю. Но фейсбук не так щедро раздает инфу о пользователях. А точнее он выдаст только публичные данные а туда кажется даже емейл не входит или это зависит от конфига акаунта, хз. Что бы получит больше, нужно в запрос https://www.facebook.com/dialog/oauth? добавить параметр "scope". Перечень некоторых значений http://developers.facebook.com/docs/reference/login/extended-profile-properties/
  • 27 Июля 2013 02:55
    tRoman
    "В верхнем правом углу нажимаем на кнопку "+ Создать новое приложение"." - В упор не вижу эту кнопку!!
  • 2 Августа 2013 02:21
    Евгений Янковец
    if (isset($userInfo['id'])) { $userInfo = $userInfo; $result = true;
    }
    
    А можно объяснить зачем делается вот это
     $userInfo = $userInfo;
    просто не понял.
  • 11 Августа 2013 19:43
    skazo4nik11
    получаю code первая часть, но ругается при использование file_get_contents для получения ключа доступа. использовал curl, но лишь брал код с чужих движков. ничего не получается. curl ничего не возвратил) но если ввести сформированную ссылку для получения ключа доступа в строку адреса, все работает, я получаю код доступа. кто может объясните в чем дело, а то я уже запарился экспериментировать и ничего не получается...
  • 11 Августа 2013 23:10
    grin16
    Кто решил вопрос с этим,отпишитесь Warning: file_get_contents(https://graph.facebook.com/oauth/access_token?client_id=581828698542152&amp;redirect_uri=http%3A%2F%2Flocalhost%2Ffacebook-auth&amp;client_secret=b6f2a62464a8b300dda3d5518d03e030&amp;code=AQBlYPpA_a3qCL85BTRSHbzj0BPgm38bJ81jj3PcGzDKsI83ySkZO1fRIBpvZ4FG67MW9g8EMQkdAJM0-XHT8nT4lNr2A8kh7_rBUR1jB3F3Br5oZLfSsA8wg39guv8IS84dfBSl7iQ4JmX1R6GqwM7kNeVf6ChG53IJIbP-jB947p-rHlmnjaifNoj8PYqHF_r-HYqcy57rUXn0qbHyGmzt2RCnPCvRfeWZCZcxqWrbug1I9McpYAYOkvGO2I2H5NYFZwz7VTJ1BdFrKr2QVWphdu3BnTRkNgQy3Who4H3B2C59CG3mwEKsfihmLBUf9qA) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in D:\ServerXamp\xampp\htdocs\facebook-auth\index.php on line 40 Проблема с загрузкой контента, кто сто лкнулся отпишитесь
  • 19 Сентября 2013 18:14
    rentto
    Добавьте пожалуйста авторизацию на Twitter, очень нужно. И думаю, не мне одному.
  • 28 Октября 2013 10:01
    Dron Mitrofanov
    Проблемка. начал делать это через curl, code получаю, а когда json на выходе null. Кто сможет помочь?
    • 28 Октября 2013 11:12
      stas.protasevich
      Видимо какие-то конфигурационные данные не верны
      • 28 Октября 2013 11:51
        Dron Mitrofanov
        вы имеете ввиду в самом приложении ФБ ?
        • 28 Октября 2013 19:11
          stas.protasevich
          скорее всего да
          • 29 Октября 2013 15:52
            Dron Mitrofanov
            Кто нить поделитесь секретом, кто осилил(желательно через курл) мб код дадите) и как настраивали фб, в часности на локальный сервер
          • 30 Октября 2013 21:13
            megokryak
            меня вот что привлекло - другой expires, а именно 5183215 и я все таки получаю accsess token только у него в конце еще символ &.В чем неправильны могут быть настройки?
  • 10 Января 2014 12:59
    Azat.Tananyan
    Спасибо за статью Хочу понять, есть ли мой сайт в отметках "нравится", для чего в параметраь `scope` добавил 'user_likes', но массив userinfo возвращает прежние значения.
  • 31 Января 2014 19:39
    kostalavista
    отличные уроки! Неплохо бы добавить Аутентификация через Instagram :)
  • 27 Июня 2014 14:30
    Valeriu Vodnicear
    как знать какие параметры ставить и как настроить приложение в ФБ есле там новая версия ?
  • 25 Августа 2014 03:02
    Александр Сонин
    Этот способ регистрации через facebook больше не актуален там способ создания приложения и его настройки кардинально поменялся(
  • 18 Октября 2014 01:00
    siren.nasu
    Хорошее дело делаете ребят , прям классный сайт!
  • 24 Октября 2014 00:53
    margoshen9ka
    Вопрос следующего плана: есть пользователи, авторизующиеся на сайте через facebook. Когда мы авторизируемся под приложением (на другом сайте через fb), то нам присваивается уникальный id, который не равен id глобальному. Он то и отдается сайту. Можно как-то, зная глобальный id, узнать id в приложении? Заранее, спасибо!
    • 24 Октября 2014 19:30
      stas.protasevich
      не совсем понимаю о каком глобальном id идёт речь
  • 13 Января 2015 18:59
    vanya_tsyntaru
    Интерфейс фейсбука уже давно поменялся в отличии от скринов, но все таки настроил всё. Всё передается, а аватарка нет. В чем может быть проблема?
  • 13 Января 2015 19:21
    vanya_tsyntaru
    Решено.
  • 14 Января 2015 18:45
    Demeus
    не могу найти в настройках Website with Facebook Login, где сейчас эта опция?
  • 22 Января 2015 19:43
    victor_dementiev
    Спасибо
  • 24 Января 2015 00:32
    victor_dementiev
    Отличный сайт
  • 8 Февраля 2015 11:54
    ea_gorshenin
    Кстати, получить изображение 50x50 можно:
    <img src='http://graph.facebook.com/".$userInfo['id']."/picture?redirect=true' alt='' />
    • 27 Апреля 2015 23:20
      tralex1993
      <img src='http://graph.facebook.com/".$userInfo['id']."/picture?redirect=true' alt='' width='50' height='50'/>
  • 23 Марта 2015 12:00
    vsevolod_lomov
    Ребят, какая должна быть база данных? Скачал исходный код, подключил к базе, но что в ней писать?
    • 27 Апреля 2015 23:21
      tralex1993
      Базу нужно создавать самому к примеру
      CREATE TABLE `Users` ( `id_u` int(40) AUTO_INCREMENT , `Nikname` varchar(180) unique, `Pass` varchar(180), `Email` varchar(180), `Photo` varchar(180),
      INDEX(`Nikname`), PRIMARY KEY (`id_u`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 29 Июля 2015 12:45
    Kalwin
    "Перелизал" весь код, поменял секретку, ид, и юрл. Вроде всё пашет, но, вдруг выбило ошибку: Warning: file_get_contents(https://graph.facebook.com/oauth/access_token?client_id=1658334461067597&redirect_uri=http%3A%2F%2Fturbo-smile.hol.es%2F&client_secret=b95f09515628a707d703102acb8eb24f&code=AQCMtY1zK9hKsXzWwKI8-8CcBgDAK6vqP7uLbbz_s2Q8VXhfzov4SbxWPgXAmCg8C5Ef9l1tchAbtEuoYuNNZt6VQwMw8pYcCL1gUc19gLF9FjAJtqS0bmE5g_CaGzNRRQRWaXGj7-OTvddpwTgjc5XC64TZWI5QWl9SZCvZWwFby_yjIVd_fN5rpMAwx2MznW6aJ7KEjcVkzKfD7HYu08WcQ_h6WXUQOZmO97iVwDn5j3LYj4PLyv3fQ1hqzEDl4fPO0VWMPAVdLAKHWfsgPyJJX7bZUK2C16YDajjxCJGny2jilMjiXngDhqb0HN4QgLpLpXWez3S-2m1yn9kNUp20): failed to open stream: Connection refused in /home/u341839271/public_html/index.php on line 43 В выше указанном примере, это 40-ая строка.
    • 30 Июля 2015 09:54
      stas.protasevich
      Походу тупо запрос не проходит... что-то может быть не так с настройками PHP или соединения
  • 4 Августа 2015 12:27
    kegus
    Не могу получить email пользователя. В $userInfo возвращается только id и name. В чём может быть причина?
    • 12 Августа 2015 17:01
      Alexey Zolotukhin
      Добавь к /me?fields=email,name& (это поля, которые хочешь получать), т.е. примерно будет так: $userInfo = json_decode(file_get_contents('https://graph.facebook.com/me' . '?fields=email,name&' . urldecode(http_build_query($params))), true);
  • 9 Августа 2015 14:19
    Scandal
    file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params_fb))) выдает пустую строку при авторизации на Facebook.. json_decode(file_get_contents('https://graph.facebook.com/me' . '?' . urldecode(http_build_query($params_fb))), true) - соответственно тоже пустая строка.. Если же набрать вручную в браузере https://graph.facebook.com/me со всеми параметрами, то нормально выдает данные id и email пользователя.. Авторизация Вконтакте и Гугл работает. В чем может быть причина? Настройках сервера (php.ini) или что-то другое?
  • 21 Сентября 2015 13:50
    Mark Gagaev
    Всем привет! Как заставит фейсбук запрашивать доступ к email каждый раз? У меня логика завязана на том, что если пользователь отказывается показать мыло, то я его не авторизую. При попытках авторизоваться еще раз, разрешения на доступ к мылу фб уже не спрашивает, и это ставит в тупик.
  • 21 Сентября 2015 14:40
    Mark Gagaev
    если кому надо, я разобрался, в первоначальный запрос добавьте это auth_type=rerequest
  • 22 Октября 2015 13:17
    Алексей Смирнов
    А кто нибудь смог к этому прикрутить ещё, чтобы при атворизации у пользователя автоматом пост на стену шел с рекламкой?
  • 27 Ноября 2015 23:55
    Alexandr Vasev
    delete
  • 13 Февраля 2016 16:29
    Сергей Шаршатов
    Последний запрос уже возвращает только id и name, чтобы получить больше данны по аккаунту - надо выполнить еще один запрос:
    https://graph.facebook.com/v2.5/{USER_ID}?access_token={ACCESS_TOKEN}&fields=id,name,picture,first_name,last_name,is_verified,link,middle_name
    • 8 Марта 2016 14:58
      vodnicearvaleriu
      Спасибо!
  • 28 Июня 2016 16:44
    Yuri Rus
    Добрый день. При вводе запроса на получении инфы в строке браузера - появляется вся инфа. { "id": "1159087860821ххх", "name": "Yuri Rus", "link": "https://www.facebook.com/app_scoped_user_id/1159087860821ххх/", "gender": "male", "birthday": "ххх", "email": "ххххх" } При запросе того же адреса Curl'ом - приходит ответ {"success":true} С чем это может быть связано?? Вот собственно запрос и параметры. До этого момента весь код верный, все работает, выводит нужную инфу.
     $params2 = array( 'fields' => 'id,name,link,gender,birthday,email', 'access_token' => $tokenInfo['access_token']);
    $url1 = "https://graph.facebook.com/me"; $curl1 = curl_init(); curl_setopt($curl1, CURLOPT_URL, $url1); curl_setopt($curl1, CURLOPT_POST, 1); curl_setopt($curl1, CURLOPT_POSTFIELDS, urldecode(http_build_query($params2))); curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl1, CURLOPT_SSL_VERIFYPEER, false); $result1 = curl_exec($curl1); curl_close($curl1);
    
    При переходе по ссылке вида (для отладки публикуется перед curl)
    echo ($url1).'?'.urldecode(http_build_query($params2));
    Выводится необходимая инфа Кто нибудь видит мою ошибку? )
    Нашел и исправил
    Плохо сидеть за компом после бурной ночи ))) Отправлял post вместо get
  • 23 Июля 2016 22:16
    siegigor
    Добрый день! При возможности регистрации через две соц. сети, как понять с какой именно проходит гет параметр code? Тоесть у меня есть две ссылки, вк и фб, как понять на какую нажал пользователь?
    • 29 Июля 2016 16:13
      stas.protasevich
      Данный вопрос раскрыт тут: http://ruseller.com/lessons.php?rub_id=37&id=1674 Решается путём введения параметра provider. Либо различными адресами обработки ответа от соц сетей
^ Наверх ^