Я пользуюсь библиотекой PHP для Графика API (http://github.com/facebook/php-sdk), но немного смущен тем, как это все работает (или не).
Я просто хочу аутентифицировать пользователя и вернуть идентификатор пользователя. То, что я действительно хочу знать, - то, что сделать, после того как пользователь вошел в систему Facebook и возвратился в мой сайт. Существуют данные, названные 'сессией' в URL. Это должно быть сохранено для непрерывного получения идентификатора пользователя? Это действительно не очевидно, мне, от образцов или (отсутствие) документация.
Кроме того, был бы это быть легче просто отключить библиотеку PHP в целом и просто обработать reponse самостоятельно, храня его в переменной сеанса. Если я должен был сделать это, каков лучший метод получения/извлечения текущего пользовательского идентификатора?
Править:
В настоящее время я скопировал facebook.php файл и example.php файл от GitHub, и только изменил имя приложения и секрет в example.php. Это не хранит cookie и говорит, что 'Вы не соединены'. Однако, когда я print_r($session);
это работает (но только если URL содержит данные сессии).
Кто-либо еще испытал проблемы как это? Действительно ли возможно, что работа localhost вызывает это?
Править:
Я загрузил точно те же два файла на хост, и он работал отлично. Это сохранило cookie и показало всю информацию, это должно. Наиболее вероятно, что работа localhost вызывает проблемы. Я изменил настройки под вкладкой Connect на приложении Разработчика Facebook, но все еще никакой удаче.
Кто-либо знает, как сделать это от localhost или что я делаю неправильно?
В URL-адресе есть данные, называемые "сеансом". Нужно ли это хранить, чтобы постоянно получать идентификатор пользователя?
Да, это необходимо, но класс Facebook анализирует его и сохраняет для вас в файле cookie.
Кроме того, было бы проще полностью вырезать библиотеку PHP и просто обрабатывать ответ самостоятельно, сохраняя его в переменной сеанса.
Класс Facebook
, представленный в facebook.php , не является необходимым для использования API, но предоставляет вам некоторые удобства, такие как объединение общих URL-адресов, анализ данных сеанса (который отправляется по URL-адресу, а затем сохраняется в файле cookie), превращая сообщения об ошибках (объект JSON с ключом "error") в исключение PHP и т. д.
Короче говоря, нет, это было бы не проще вырезать библиотеку PHP, потому что вы в конечном итоге напишете в основном то же самое.
Как видно из примера, они получают идентификатор пользователя ( $ uid
), вызывая getUser
:
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}
$ uid - это просто целое число, а ] $ me
- это данные текущего пользователя (которые, похоже, вам не нужны). Те же данные можно получить, позвонив:
$me = $facebook->api('/' . $uid); //Generates https://graph.facebook.com/[uid]
Проблема, с которой я сейчас столкнулся с этим примером, заключается в том, что функция curl внутри класса Facebook ( метод makeRequest
) по какой-то причине не возвращает содержимого. Итак, $ me
заканчивается ничем, поэтому в примере все еще говорится «Вы не подключены». Но если вы выведете $ uid
, вы увидите, что он действительно содержит идентификатор текущего пользователя.
Одна вещь, которая помогает, - это проверка заголовков ответов от Facebook, иногда (редко) они могут быть информативными.
Я обнаружил, что вам нужно позвонить в / oauth / authorize (с параметрами запроса), чтобы авторизовать веб-сайт / приложение, чтобы Facebook выдал вам токен доступа.
закрытая функция setCookieFromSession ($ session = null)
не работает, поскольку параметр $ domain пуст. Я использую это для локального тестирования:
if ($domain != '') {
setcookie($cookieName, $value, $expires, '/', '.' . $domain);
} else {
setcookie($cookieName, $value, $expires, '/');
}
Проверяли ли вы последнюю версию facebook.php с github? Последняя версия учитывает волшебные кавычки и поэтому возвращает сеанс вместо нуля.