Проблемы с получением идентификатора пользователя с помощью getUser в PHP SDK
Мне очень трудно заставить Facebook PHP SDK работать с плагином Wordpress, в котором я пытаюсь восстановить поток входа в систему. Проблема, с которой я сталкиваюсь, заключается в том, что getUser() всегда возвращает 0, хотя определенно вошел пользователь. В основном мой код работает следующим образом:
У меня есть страница параметров (в WordPress), которая при загрузке создает экземпляр класса-обертки или класса PHP SDK Facebook, как это:
$facebook = new FacebookAPI;
Конструктор для этой оболочки создает экземпляр класса PHP SDK Facebook и сохраняет его, одновременно устанавливая несколько переменных класса и выполняя некоторую работу по управлению сеансами, сохраненными в плагине.
Затем на странице параметров есть кнопка, которая является ссылкой на login_url, сгенерированный объектом Facebook, т.е. getLoginUrl(). URL входа в систему вызывается таким образом, используя класс-оболочку:
// Set Login Url $params = array( 'scope' => 'user_photos,user_photo_video_tags', 'redirect_uri' => FB_REDIRECT_URI, 'display' => 'page' ); $loginURL = $facebook->get_login_url($params);
Redirect_uri здесь - это страница настроек плагина в WordPress, и когда страница перезагружается, появляется код, который проверяет, все ли в порядке. Он делает это, проверяя, содержит ли URL переменную "code", т. Е. Установлен ли $_REQUEST['code']. (Это то, что делает FB, когда он успешно завершает процесс входа / разрешения.
Проблема: если в объекте запроса установлен "код", я думаю, что тогда я смогу вызвать getUser() для класса Facebook SDK и получить идентификатор пользователя. Здесь я сталкиваюсь с проблемой. getUser() всегда возвращает 0, и я не смог понять, почему.
Однако я заметил одну вещь: если я выполню var_dump($_SESSION), массив будет пустым. И в журнале ошибок PHP у меня есть следующие предупреждения PHP:
PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /****/****/Sites/ld-full/wp-admin/menu-header.php:92) in /****/****/Sites/ld-full/wp-content/plugins/fotobook/facebook-platform/facebook.php on line 49
Строка 92 в menu-header.php, однако, выглядит следующим образом:
echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class $aria_attributes>$title</a>";
Я не вижу здесь ничего, что могло бы писать заголовки. Так что я на данный момент довольно озадачен.
У кого-нибудь есть идеи о том, что здесь может происходить? Любая помощь будет абсолютно фантастической.
1 ответ
Проблема: если в объекте запроса установлен "код", я думаю, что тогда я смогу вызвать getUser() для класса Facebook SDK и получить идентификатор пользователя.
Нету. Назначение параметра кода - обмен на токен доступа.
есть код, который проверяет, все ли в порядке. Он делает это, проверяя, содержит ли URL переменную "code", т. Е. Установлен ли $_REQUEST['code']. (Это то, что делает FB, когда он успешно завершает процесс входа / разрешения.
Получение параметра кода не означает, что авторизация уже завершена - упомянутый выше шаг должен быть выполнен первым.
И в журнале ошибок PHP у меня есть следующие предупреждения PHP:
Предупреждение PHP: session_start(): Невозможно отправить cookie сессии - заголовки уже отправлены […]
Ppppleeeaaaaseee сами исследуют это сообщение об ошибке - его обсуждали и объясняли в Интернете чаще, чем люди, вероятно, искали Пэрис Хилтон в явном контексте...