Проблемы с получением идентификатора пользователя с помощью getUser в PHP SDK

Мне очень трудно заставить Facebook PHP SDK работать с плагином Wordpress, в котором я пытаюсь восстановить поток входа в систему. Проблема, с которой я сталкиваюсь, заключается в том, что getUser() всегда возвращает 0, хотя определенно вошел пользователь. В основном мой код работает следующим образом:

  1. У меня есть страница параметров (в WordPress), которая при загрузке создает экземпляр класса-обертки или класса PHP SDK Facebook, как это:

    $facebook = new FacebookAPI;
    

    Конструктор для этой оболочки создает экземпляр класса PHP SDK Facebook и сохраняет его, одновременно устанавливая несколько переменных класса и выполняя некоторую работу по управлению сеансами, сохраненными в плагине.

  2. Затем на странице параметров есть кнопка, которая является ссылкой на 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);
    
  3. 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 сами исследуют это сообщение об ошибке - его обсуждали и объясняли в Интернете чаще, чем люди, вероятно, искали Пэрис Хилтон в явном контексте...

Другие вопросы по тегам