0

我很难让 Facebook PHP SDK 与我正在尝试修复登录流程的 Wordpress 插件一起使用。我遇到的问题是 getUser()总是返回 0 即使肯定有用户登录。基本上,我的代码工作如下:

  1. 我有一个选项页面(在 wordpress 中),当它被加载时会创建一个包装类的实例,或者 PHP SDK Facebook 类的实例,如下所示:

    $facebook = new FacebookAPI;
    

    此包装器的构造函数创建 PHP SDK Facebook 类的实例并保存它,同时还设置一些类变量并做一些工作来管理保存在插件中的会话。

  2. 然后在选项页面中有一个按钮,它是一个指向由 Facebook 对象生成的 login_url 的链接,即 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 在成功完成登录/权限过程时所做的。

问题: 如果在请求对象中设置了“代码”,我想我应该能够在 facebook sdk 类上调用 getUser() 并获取用户 ID。这就是我遇到问题的地方。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

然而,menu-header.php 中的第 92 行如下:

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>";

我在这里看不到任何会写标题的东西。所以我在这一点上相当难过。

有人对这里可能发生的事情有任何想法吗?任何帮助都会非常棒。

4

1 回答 1

1

问题:如果在请求对象中设置了“代码”,我想我应该能够在 facebook sdk 类上调用 getUser() 并获取用户 ID。

没有。code 参数的目的是交换访问令牌。

有代码检查登录过程是否正常完成。它通过查看url 是否包含'code' 变量来做到这一点,即是否设置了$_REQUEST['code']。(这是 FB 在成功完成登录/权限过程时所做的。

获取到code参数并不意味着授权已经完成——必须先执行上述步骤。

在 PHP 错误日志中,我有以下 PHP 警告:

PHP 警告:session_start():无法发送会话 cookie - 标头已由 [...]

Ppppleeeaaaaaseee自己研究该错误消息——它在网络上被讨论和解释的次数可能比人们在明确的上下文中搜索 Paris Hilton 的次数还要多……</p>

于 2012-10-24T21:36:05.120 回答